0

我尝试在设置更改时从全局页面向我的 injection.js 发送消息:

全局.html

    function settingChanged(event) {
            if(event.key == 'open') {
                    safari.self.tab.dispatchMessage('openChanged', safari.extension.settings['open']);
            }
        }

        safari.extension.settings.addEventListener("change", settingChanged, false);

注入的.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);

我没有收到injected.js 中的消息,我做错了什么?

4

1 回答 1

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...
    }
}
于 2010-08-22T16:23:16.427 回答