2012-05-16 51 views
11

出於開發目的,我希望能夠輕鬆地將本地存儲的腳本加載到瀏覽器中,而不必將其複製粘貼到控制檯。有什麼辦法來動態加載本地JS文件?

創建新的<script>元素不起作用,它會給出Not allowed to load local resource: file://....錯誤(在Chrome中)。

此外,創建userscript不起作用 - 每次我進行編輯時我都必須重新安裝它。

是否有一種方法可以通過書籤/ etc輕鬆加載本地腳本?

+1

如果我們被允許在JavaScript和瀏覽器之外進行分支,可以在這裏爲您的腳本在本地服務器上運行(也許您正在進行本地開發)?你可以用一行Python啓動一個本地服務器。 – cheeken

+0

@cheeken:是的,這實際上是一個好主意..我已經安裝了Apache,而且無論如何我都在Apache文件夾中進行了開發,所以這是一個很好的選擇! – Manishearth

回答

24

在Chrome中,您可以創建一個包含所有的擴展您需要加載的本地文件。它會使你的文件訪問通過的chrome-extension://...代替file://...

將名爲manifest.json文件在一個新文件夾,並用填充:

{ 
    "name": "File holder", 
    "manifest_version": 2, 
    "version": "1.0", 
    "web_accessible_resources": ["test.js", "other.js", "yetanother.js"] 
} 

然後,把所有你想要在新目錄中加載腳本,並確保它們包含在web_accessbile_reources清單列表中。通過轉到chrome://extensions加載擴展,啓用Developer Mode,然後使用Load unpacked extension...選擇新文件夾。

現在,您可以使用chrome-extension://[app_id]/[file_name]訪問擴展目錄中的所有文件,其中「app_id」是在chrome://extensions頁面上爲擴展名列出的散列。請注意,由於協議和主機名與您在實際工作中的位置不同(除非您決定在擴展文件夾中完成所有開發(您可能會接受),所以擴展資源是跨域的,只能是通過<script>標籤加載。

從控制檯

現在,你可以這樣做:

var s = document.createElement("script"); 
s.src = "chrome-extension://aefigdoelbemgaedgkcjpcnilbgagpcn/test.js"; 
document.body.appendChild(s); 

(假設你的文件是test.js和應用ID是aefigdoelbemgaedgkcjpcnilbgagpcn

這是鍵入一個相當位,我知道,但也許您可以將chrome-extension://[app_id]部分存儲爲一個簡寫變量?

+0

我試着用Chrome 22來做這件事,並且它顯示了一條警告,明確版本1的支持正在被淘汰。有關v2更改的文檔包括:「缺省情況下,程序包的資源不再可用於外部網站(如圖像的src或腳本標記)。如果您希望網站能夠加載包中包含的資源,則需要通過web_accessible_resources清單屬性將其明確列入白名單。這對於通過注入內容腳本在網站上構建界面的擴展特別重要。「我懷疑我們需要這個。 – Barmar

+0

一旦我加載腳本文件,我該如何使用它?我的.js文件包含一個單獨的頂部當我嘗試在Javascript控制檯中調用它時,它說它沒有被定義。 – Barmar

+0

@Barmar:這個答案是在清單2版本被廣泛使用之前編寫的,感謝您的通知;現在我會改正它。 – apsillers

-1

您是否嘗試過你的js文件liek所以從你的頁面中的相對路徑...

的src =「/ JS/javascript.js」

+0

將無法​​正常工作,我正在開發一個用戶腳本 - 否則,爲什麼我會首先複製粘貼到控制檯? – Manishearth

1

很遺憾,Chrome doesn't allow you to load local files via AJAX;但是,您可以通過啓動帶有標記--disable-web-security(詳細信息因主機操作系統而異)的瀏覽器來解決此限制。

+5

我可能會建議'--allow-file-access-from-files'來代替?這將允許所有其他Web安全功能保持有效,並且(我相信)仍然可以達到預期的效果。 – apsillers

+0

有趣的發現,但[這個SO回答](http://stackoverflow.com/a/4271569/244128)引起了一些關於該功能基於[未解決的問題]的有效性的關注(http://code.google.com/p /鉻/問題/細節?ID = 4197&可以= 1&q =允許文件存取從-文件&colspec = ID%20Stars%20Pri%20Area%20Feature%20Type%20Status%20Summary%20Modified%20Owner%20Mstone%20OS)。 – maerics

+0

我沒有得到的是,$ .getScript的作品。 – njzk2

相關問題