2

Chrome拡張機能を使用してiframeのコンテンツを編集したいのですが、iframeのcontentWindow / contentDocumentが未定義を返すため、編集できません。答えを探していて、私が理解しているように、iframeが最初からページに存在する場合は簡単に修正できますが、そうではありません。問題のiframeは、iframeの形式のGmail作成テキスト領域であり、動的にDOMに追加されます。Chrome拡張機能を介してこれを行う方法はありますか?

編集:ごめんなさい。Rob Wは、contentDocumentに実際にアクセスできることに気づきました。ここで私がやろうとしているのは、Gmailにいくつかの機能を追加することです。ツールバーにボタンがあり、作成ウィンドウにHTMLを追加します。これでボタンが部分的に機能し、htmlが追加されますが、これを行うためにcontentWindowにアクセスできないため、想定どおりに機能しません。

range = iWindow.getSelection().getRangeAt(0);
node = range.createContextualFragment(html);
range.insertNode(node);

これに対する解決策はありますか?

4

1 に答える 1

3

contentWindowChrome拡張機能ではアクセスできません
contentDocument一方、Gmailの場合のように、iframeが同じ原点にある場合は、フレーム内のドキュメントを正しく返します。

Gmailの例を次に示します。簡単にするために、ドキュメントにはエディターが1つだけあると仮定しました。

var poller = setInterval(function() {
    var editor = document.querySelector('iframe.editable');
    if (editor && editor.contentDocument && !editor.__rwHandled) {
        editor.__rwHandled = true; // Run once for an editor instance
        var textNode = document.createTextNode('It works!');
        editor.contentDocument.body.appendChild(textNode);
    }
}, 200);

ポーラーを停止するときはいつでも、を使用してclearInterval(poller);ください。検出方法が安価であることを確認してください。例:DOMノードのクエリはOKですが、新しいウィンドウを開くことはできません。

于 2012-12-02T13:43:32.437 に答える