Safari的扩展消息到inject.js

时间:2010-08-21 22:37:55

标签: jquery safari-extension

我尝试在设置更改的那一刻向全局页面发送消息到我的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中的消息,我做错了什么?

1 个答案:

答案 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...
    }
}