2

私の拡張機能には、現在のWebページ(www.google.comなど)<div>の内部を含むコンテンツスクリプトがあります。<iframe>ページをiframeにロードしますが、コンテンツは動的である必要があるため、最初にを使用して大量のHTMLをバックグラウンドページに投稿しますsendRequest。次に、iframeページはバックグラウンドページにクエリを実行し(ここでもsendRequest)、HTMLを取得して、ページの本文に追加します。

問題は、動的コンテンツが追加されたときにiframeのサイズが正しくないため、スクロールバーがあることです。私はこのようなことをしたいと思います:

iframe.addEventListener("DOMContentLoaded", function(event) {
    div.style.height = iframe.style.height = iframe.contentDocument.body.scrollHeight;
    div.style.width = iframe.style.width = iframe.contentDocument.body.scrollWidth;
}, false);

残念ながら、これには2つの問題があります。まず第一に、DOMContentLoadedイベントは決して発生しません(なぜですか?)。iframe.contentDocument次に、 iframeが別のドメインから読み込まれているため、おそらくアクセスできません。

iframeを使用sendRequestして、ホスティングページが入手できる場所にサイズを投稿することができます。ただし、同じコードを使用してiframeをポップアップウィンドウにも挿入しているため、リクエストを送信する簡単な方法はありません(chrome.tabs.sendRequestコンテンツスクリプトchrome.extension.sendRequestではなくポップアップウィンドウで使用されるため)。

これを行う方法についてのアイデアはありますか?

4

1 に答える 1

3

もう少し突いて、解決策を見つけました。iframeは、動的コンテンツをロードすると、次の呼び出しを行います。

var size = { height: document.body.scrollHeight, width: document.body.scrollWidth };
top.postMessage(JSON.stringify(size), "*");

親ウィンドウには次のものが含まれます。

window.addEventListener("message", function(event) {
    var size = JSON.parse(event.data);
    iframe.style.height = div.style.height = size.height + "px";
    iframe.style.width = div.style.width = size.width + "px";
});
于 2012-06-08T15:44:43.477 に答える