有没有办法动态加载本地JS文件?

时间:2012-05-16 03:57:44

标签: javascript google-chrome

出于开发目的,我希望能够轻松地将本地存储的脚本加载到浏览器中,而不必复制粘贴到控制台。

创建新的<script>元素不起作用,它会导致Not allowed to load local resource: file://....错误(在Chrome中)。

此外,创建用户脚本不起作用 - 每次进行编辑时都必须重新安装。

是否有另一种方法可以通过bookmarklet / etc轻松加载本地脚本?

5 个答案:

答案 0 :(得分: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]部分存储为速记变量?

答案 1 :(得分:1)

可悲的是,Chrome doesn't allow you to load local files via AJAX;但是,您可以通过使用标记--disable-web-security启动浏览器来解决此限制(详细信息因主机操作系统而异)。

答案 2 :(得分:0)

您需要运行本地http服务器

这是一个很好的文档:

https://developer.mozilla.org/en-US/docs/Learn/Common_questions/set_up_a_local_testing_server

答案 3 :(得分:0)

运行 chrome 为: chrome.exe --allow-file-access-from-files 来自 CLI

答案 4 :(得分:-1)

你有没有试过从你的页面到你的js文件谎言的相对路径所以...

SRC = '/ JS / javascript.js'