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