0

Chrome拡張機能から実行されるコンテンツスクリプトがあります。このスクリプトiframeは、現在のページの本文にを挿入します。iframe内からを閉じる可能性がありiframeます。どうすればこれを行うことができますか?この問題をWebで検索したところ、ほとんどのソリューションでwindow.parent.documentプロパティが使用されていますが、私の場合は何らかの理由で定義されていません。何か案は?

編集-コードサンプル:

のHTMLでiframe

<script type="text/javascript">
        function frameClose() {
            var windowFrames = window.parent.frames;
            for (var i = 0; i < windowFrames.length; i++) {
                var aFrame = windowFrames[i];
                if (aFrame.name == 'myFrame') {
                    alert('in frame');
                    // WHAT TO DO HERE?
                    // window.parent.document is undefined
                    // aFrame.parentNode.removeChild(aFrame); - THIS DOES NOT WORK ALSO
                    break;
                }
            }
        }
    </script>

これは私が注入する方法iframeです:

Extension.js

chrome.browserAction.onClicked.addListener(function(tab) {

    chrome.tabs.executeScript(null, {
        file : "/js/PushIFrame.js"
    }, function() {
        if (chrome.extension.lastError) {
        }
    });
});

そしてPushIFrame.jsで私は持っています:

chrome.extension.sendMessage({
    action: "pushFrame",
    source: pushIframe(document)
});

function pushIframe(document) {
    var existingFrame = document.getElementById('bmarkFrame');
    if (existingFrame == null) {
        var temp = document.createElement('iframe');
        temp.id = 'myFrame';
        temp.name = 'myFrame';
        temp.setAttribute('scrolling', 'no');
        temp.setAttribute('allowtransparency', 'true');
        temp.style.border = 'none';
        temp.style.height = '100%';
        temp.style.width = '100%';
        temp.style.position = 'fixed';
        temp.style.zIndex = 99999999;
        temp.style.top = 0;
        temp.style.left = 0;
        temp.style.display = 'block';
        temp.src = 'https://www.mysite.com/';

        document.body.appendChild(temp);
    }
    else {
        existingFrame.style.display = 'block';
    }
}
4

1 に答える 1

1

コンテンツ スクリプト (たとえば) でイベントをメイン フレームにPushIframe.jsバインドします。message次に、iframe を非表示にするたびに、呼び出しparent.postMessageてメイン フレームに通知します。このメッセージは、フレームを非表示にできるコンテンツ スクリプトによって受信されます (関数で定義されているとおりpushIframe)。

// PushIframe.js:
addEventListener('message', function(ev) {
    if (ev.data === 'closeIframe') {
        pushIframe(document); // Your code
    }
});

// Iframe:
<script>
function frameClose() {
    parent.postMessage('closeIframe', '*');
}
</script>
于 2012-09-21T17:26:11.140 に答える