簡體   English   中英

從Chrome擴展程序訪問iframe網址

[英]Access iframe URL from Chrome extension

我有一個擴展,需要在其后台頁面中加載包含大量重定向的頁面。 一旦該頁面到達已知URL( https://website.com/index.php ),iframe的src應設置為about:blank

最后一頁非常大,並且有大圖像和所有不需要加載的內容,因此我不是連接到iframe的onload事件,而是在100ms間隔設置以下函數:

function update(){
    if(document.getElementsByTagName('iframe')[0].contentDocument.location.href == "https://website.com/index.php"){
        console.log("Done!");
        clearInterval(updateInterval);
        document.getElementsByTagName('iframe')[0].src = "about:blank";
    }
}

但是,只要iframe開始加載,update()就會拋出此錯誤:

不安全的JavaScript嘗試使用URL chrome-extension://hdmnoclbamhajcoblymcnloeoedkhfon/background.html從URL訪問具有URL https://website.com/index.php的框架。 請求訪問的幀具有“chrome-extension”協議,被訪問的幀具有“https”協議。 協議必須匹配。

我嘗試了catch()這個錯誤,但傳遞回Javascript的消息並不奇怪,不包括URL。 頁面重定向多次,因此了解確切的URL非常重要。 iframe的src屬性也不會更新以反映重定向。

經過大量的谷歌搜索和幾乎放棄,我想出了以下解決方案。 它使用注入的內容腳本在加載正確的頁面后將消息發送回擴展。

manifest.json的:

{
    ...
    "background": {
        "page": "background.html"
    }, "content_scripts": [
        {
            "matches": ["http://website.com/index.php"],
            "js": ["content.js"],
            "all_frames": true,
            "run_at": "document_start"
        }
    ],
    "permissions": [
        "*://*.website.com/*"
    ]
}

background.html:

<html>
    <head>
        <script type="text/javascript" src="background.js"></script>
    </head>
    <body>
        <iframe src="about:blank"></iframe>
    </body>
</html>

background.js:

var waiting = false;

function login(){ // Call this function to start
    var frame = document.getElementsByTagName('iframe')[0];
    frame.src = "https://website.com/login/";
    waiting = true;
}

function callback(){ // This gets called once the page loads
    console.log("Done!");
}

chrome.extension.onMessage.addListener(function(request, sender, sendResponse){
    if(request.loaded && waiting){
        // If you used a pattern, do extra checks here:
        // if(request.loaded == "https://website.com/index.php")
        document.getElementsByTagName('iframe')[0].src = "about:blank";
        waiting = false;
        callback();
    }
});

content.js:

chrome.extension.sendMessage({loaded: window.location.href});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM