我尝试在设置更改的那一刻向全局页面发送消息到我的inject.js:
global.html
function settingChanged(event) {
if(event.key == 'open') {
safari.self.tab.dispatchMessage('openChanged', safari.extension.settings['open']);
}
}
safari.extension.settings.addEventListener("change", settingChanged, false);
injected.js
// Message Event Handler
function handleMessage(e) {
if(e.name == 'openChanged') {
console.log('%o', e);
oi = e.message;
resetNSL();
}
}
// Message Event Listener
safari.self.addEventListener('message', handleMessage, false);
我没有收到inject.js中的消息,我做错了什么?
答案 0 :(得分:2)
在您的全局页面中,您无法使用safari.self.tab
,因为全局页面未与任何标签关联。您可以访问所有选项卡,您必须确定哪一个是好选项卡。如果一切都很好,只要活跃的一个好,那就不应该太难了:
// the active tab
safari.application.activeBrowserWindow.activeTab.page.dispatchMessage...
// all tabs
for (var i = 0; i < safari.application.browserWindows.length; i++)
{
var browserWindow = safari.application.browserWindows[i];
for (var j = 0; j < browserWindow.tabs.length; j++)
{
var tab = browserWindow.tabs[j];
tab.page.dispatchMessage...
}
}