编程语言
首页 > 编程语言> > javascript-Safari扩展程序将消息发送到特定选项卡

javascript-Safari扩展程序将消息发送到特定选项卡

作者:互联网

有没有一种方法可以将消息从全局页面发送到特定选项卡?
我当前正在做的是,在创建选项卡时,注入的脚本会创建一个唯一的ID,并将带有该数字的消息发送到全局页面,然后全局页面会保存该数字.
如果全局页面需要将某些数据发送到选项卡(即选项卡#3),则全局页面将向所有选项卡“广播”一条消息,其中编号为3的消息作为传递到选项卡的数据的一部分(遍历所有选项标签并向每个标签发送消息).
是否有类似Chrome的东西:(即chrome.tabs.sendRequest(tabID,{action:’respond’,params:[channel,msg,async]});)?

现在,我正在做的是在注入的脚本方面,每个脚本都有一个侦听器来捕获此消息.如果内容脚本唯一编号等于全局页面发送的编号,则此消息适用于此消息,否则为no.

在Safari中,有没有更简单,更优雅的方法?

解决方法:

在全局页面的消息事件处理程序中,event.target是指从中接收消息的选项卡.例如:

function handleMessage(e) {
    if (e.name === 'whatIsMyUrl?') {
        e.target.page.dispatchMessage('yourUrlIs', e.target.url);
    }
}
safari.application.addEventListener("message", handleMessage, false);

Safari扩展API没有标签ID,但您可以将每个标签保留在关联数组中,并在以后使用其索引进行寻址.例如:

function handleMessage(e) {
    if (e.name === 'hereIsMyId') {
        myTabs[e.message] = e.target;
    }
}
safari.application.addEventListener("message", handleMessage, false);

// later...
myTabs[someId].page.dispatchMessage('haveSomeCake');

标签:safari-extension,add-on,safari,browser-extension,javascript
来源: https://codeday.me/bug/20191101/1984284.html