有没有办法从全局页面发送消息到特定选项卡?
我目前正在做的是,在创建选项卡时,注入的脚本会创建一个唯一的 ID,并将包含该编号的消息发送到全局页面,并且全局页面会保存该编号。
如果全局页面需要发送一些数据到一个tab(即:tab#3
)然后全局页面将向所有带有该号码的选项卡“广播”一条消息#3
作为传递到选项卡的数据的一部分(迭代所有选项卡并向每个选项卡发送消息)。
有没有类似 Chrome 的东西:(即:chrome.tabs.sendRequest(tabID, {action: 'respond', params:[channel,msg,async]});
)?
现在我正在做的是,在注入的脚本端,每个脚本都有一个侦听器来捕获此消息。如果内容脚本唯一编号等于全局页面发送的编号,则此消息适用于它,否则doNothing
.
在 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');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)