2015-11-06 85 views
2

無論我做什麼,我似乎都無法做到這一點。讓我用一個非常簡單的示例擴展來演示。這裏是manifest.json:我content_scripts條目匹配all_urls,這(根據Google documentation如何讓content_scripts在file中執行:/// Chrome擴展中的URL

{ 
    "manifest_version": 2, 

    "name": "Sample Of Content Script", 
    "description": "Changes the background of a page pink", 
    "version": "1.0", 

    "content_scripts": [ 
    { 
     "matches": [ "<all_urls>" ], 
     "js": [ "changer.js" ] 
    } 
    ], 

    "permissions": [ 
    "webNavigation" 
    ], 

    "background": { 
    "scripts": [ "background.js" ] 
    } 
} 

通知應匹配file:///網址。

background.js

(function (chrome) { 
    'use strict'; 

    chrome.webNavigation.onCompleted.addListener(function (details) { 
     chrome.tabs.sendMessage(details.tabId, { 
      action: 'changeBackground', 
      color: 'pink' 
     }); 
    }); 

})(chrome); 

而且changer.js(內容腳本):

(function (chrome) { 
    'use strict'; 

    chrome.runtime.onMessage.addListener(function (request) { 
     if (request.action !== 'changeBackground') { return; } 
     document.body.style.background = request.color; 
    }); 

})(chrome); 

本擴展已被髮布在Chrome網上應用店,所以你可以看到結果在行動:

https://chrome.google.com/webstore/detail/sample-of-content-script/bkekbfjgkkineeokljnobgcoadlhdckd

這是一個非常簡單的擴展。導航到一個頁面,它將頁面的背景變成粉紅色。不幸的是,它不適用於任何file:///網址。 changer.js腳本未加載到頁面中,並且沒有任何反應。

額外的信息

  • 它實際上似乎開發模式正在開發的擴展運行時工作得很好。從文件系統加載的頁面變成粉紅色。
  • 我嘗試使用chrome.tabs.executeScript()而不是將腳本放入清單。這更明顯地失敗了,說我沒有請求修改清單中的file:///網址的權限。
  • 我將"file:///*/*"加到manifest.jsonpermissions部分。這似乎與chrome.tabs.executeScript()一致,但Chrome網上應用店拒絕了該擴展程序,稱file:///權限不被允許。
  • 我恢復爲manifest.json中的content_script部分,並嘗試將"file:///*/*添加到清單中的matches部分。再次,這在開發版本中有效,但是當我將其上傳到Chrome網上應用店並安裝它時,它不起作用。

回答

3

<all_urls>確實包含file://方案,但必須在擴展列表中手動激活它。

如果擴展程序具有覆蓋file://方案的權限,它將在「隱身允許」旁邊有一個「允許訪問文件URL」複選框。用戶必須手動啓用;您可以通過在解釋過程後創建一個帶有預配置URL的選項卡來提供幫助:

chrome.tabs.create({url: "chrome://extensions/?id=" + chrome.runtime.id}); 
+0

非常感謝。我沒有注意到這個細節。 – danBhentschel