0

Kango を使用して、iFrame をページに追加しました。この iFrame は内部リソースを指しています。この iFrame がバックグラウンド スクリプトと通信できるようにします。実際に iFrame から Kango API にアクセスできるようにしたいのですが、それが不可能な場合は、この iFrame をコンテンツ スクリプトでどのようにターゲットにすればよいのでしょうか。

4

1 に答える 1

0

iFrame 内にあるアプリケーションから、次のことができます。

top.window.postMessage({ type: 'EVENT', data: {} }, "*");

次に、Kango 拡張機能の HTML リンク内に、以下を含む JS ファイルをリンクします。

KangoAPI.onReady(function () {
  window.addEventListener('message', function (event) {
    console.log('host.js -> message', event);
    kango.dispatchMessage('MessageToWindow', event);
  });

  document.body.onload = function () {
    try {
        document.getElementById('iFrameID').src = 'URL';
    } catch (ex) {
        throw ex;
    }
}
});

次に、background.js 内

kango.addMessageListener('MessageToWindow', function (event) {
  console.log('background.js -> MessageToWindow', event);
  kango.browser.tabs.getCurrent(function (tab) {
    console.log('background.js -> TAB', tab || 'NONE');
    console.log('background.js -> TYPE', event.data.data.type || 'NONE');
    console.log('background.js -> DATA', event.data.data.data || 'NONE');
    tab.dispatchMessage(event.data.data.type, event.data.data.data);
  });
});

最後に、content.js 内で

kango.addMessageListener('EVENT', function(event) {
  kango.console.log('got event');
});

たくさんのように思えますが、これが私がそれを機能させる唯一の方法でした。それが役立つことを願っています!

于 2015-06-22T16:48:49.477 に答える