2015-08-29 176 views
9

我的Chrome擴展程序未使用content_scripts,因爲我不想將代碼注入每個頁面。相反,當用戶點擊按鈕時,彈出窗口打開並將代碼注入頁面。「about:blank」頁面的Chrome擴展權限

因此,在manifest.json有權限塊:

"permissions": [ 
    "activeTab" 
] 

而在popup.js有這樣的代碼:

chrome.windows.getCurrent(function(win) { 
    chrome.tabs.query({ 
     'windowId': win.id, 
     'active': true 
    }, function(tabArray) { 

     // inject css & js only on initial click 
     chrome.tabs.executeScript(null, { 
      code : 'document.querySelector("body").classList.contains("_myExtension_code_injected")' 
     }, function(result) { 
      if (result && !result[0]) { 
       chrome.tabs.insertCSS(null, { 
        file: 'myExtension.css' 
       }); 

       chrome.tabs.executeScript(null, { 
        file: 'myExtension.js' 
       }, function(){ 
        chrome.tabs.executeScript(null, { 
         code: 'myExtension.init();' 
        }); 
       }); 
      } 
     }); 

    }); 
}); 

問題是有些網站打開一個彈出窗口,附加信息。該彈出頁面的URL是"about:blank"。如果我嘗試初始化的延長,我在控制檯中看到這樣的信息:

未選中runtime.lastError在運行tabs.executeScript:無法訪問URL的內容輸入「about:空白」。擴展清單必須請求訪問此主機的權限。

我看不到添加"about:blank"頁面到permissions頁面的方法。我真的不想開始使用content_scripts,所以我可以設置match_about_blank設置。

我已經嘗試添加"about:blank""about:*permission和我得到的是安裝錯誤。

嘗試安裝此擴展程序時出現警告: 權限'about:*'未知或URL模式格式錯誤。

有沒有解決方法?


更新:Here is a gist with everything you'll need。包含jsbin演示的鏈接,但問題不在該網站專門。該擴展程序最初是通過選擇打印電子郵件的yahoo郵件彈出窗口進行測試的。

+0

你就不能對證'有關'windows.location.href'值:blank'執行任何代碼之前? – Mathlight

+0

Chrome因爲需要權限而阻止代碼注入。我列入了上面顯示的錯誤。 – Mottie

+0

我明白那一部分。但是我的意思是如果可能的話,在注射部位進行檢查。 (如果可能的話,我不知道這是否足夠) – Mathlight

回答

4

嘗試使用chrome.tabs.executeScript({ file: "script.js", matchAboutBlank: true })

「如果matchAboutBlank是真實的,那麼代碼也被注入約:空白,約:srcdoc框架如果您的分機可以訪問它的父文件的代碼不能在頂級插入about:-frames。默認情況下它是false。「

https://developer.chrome.com/extensions/tabs#property-details-matchAboutBlank

+0

謝謝!我完全錯過了文檔中的內容。可悲的是,即使在添加該參數後,我仍然看到相同的錯誤消息。 – Mottie

+0

也許問題是「about:blank」彈出頁面不會顯示爲標籤,因此我必須右鍵單擊標題並選擇「Show as tab」才能顯示擴展按鈕。 – Mottie

+0

也許問題是訪問父文檔部分。 –