0

我有一个从我的 chrome 扩展程序运行的内容脚本。此脚本将一个注入iframe到当前页面的正文中。我希望有可能iframeiframe. 我该怎么做呢?当我在网上搜索这个问题时,几乎每个解决方案都使用由于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

扩展.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 回答