0

設定が変更された瞬間に、グローバルページからinjected.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);

注入された.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);

Injection.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 に答える