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

Javascript 有没有办法动态加载本地JS文件?,javascript,google-chrome,Javascript,Google Chrome,出于开发目的,我希望能够轻松地将本地存储的脚本加载到浏览器中,而不必将粘贴复制到控制台 创建新的元素不起作用,它会导致不允许加载本地资源:file://....错误(在Chrome中) 此外,创建用户脚本也行不通——每次编辑时我都必须重新安装它 有没有其他方法可以通过bookmarklet/etc轻松加载本地脚本?您是否尝试过从页面到js文件的相对路径liek so… src='/js/javascript.js'在Chrome中,您可以创建一个扩展来保存需要加载的所有本地文件。它将通过chro

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

创建新的
元素不起作用,它会导致
不允许加载本地资源:file://....
错误(在Chrome中)

此外,创建用户脚本也行不通——每次编辑时我都必须重新安装它


有没有其他方法可以通过bookmarklet/etc轻松加载本地脚本?

您是否尝试过从页面到js文件的相对路径liek so…


src='/js/javascript.js'

在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\u accessbile\u reources
清单列表中。通过转到
chrome://extensions
,启用
开发人员模式
,并使用
加载解包扩展名选择新文件夹…

现在,您可以使用
chrome扩展名://[app\u id]/[file\u name]
访问扩展名目录中的所有文件,其中“
app\u id
”是
chrome://extensions
第页。请注意,由于协议和主机名与您实际工作的位置不同(除非您决定在扩展文件夹中进行所有开发,这可能是您可以接受的),因此扩展资源是跨域的,只能通过
标记加载

现在,您可以从控制台执行以下操作:

var s = document.createElement("script");
s.src = "chrome-extension://aefigdoelbemgaedgkcjpcnilbgagpcn/test.js";
document.body.appendChild(s);
(假设您的文件是
test.js
,并且您的应用程序id是
aefigdoelbemgaedgkcjpcnilbgagpcn


我知道,这很难输入,但也许你可以将
浏览器扩展名://[app_id]
部分存储为一个速记变量?

遗憾的是;但是,您可以通过启动带有标志“禁用web安全”的浏览器来克服此限制(详细信息因主机操作系统而异)。

您需要运行本地http服务器

这是一个很好的文档,用于:


如果允许我们在JavaScript和浏览器之外进行分支,那么我们可以在本地服务器上提供您的脚本(可能您正在进行本地开发)?你可以用一行Python启动本地服务器。@cheeken:是的,这实际上是个好主意。。我确实安装了Apache,而且我在Apache文件夹中进行开发,所以这是一个很好的选择!我是否可以建议您改为允许从文件访问文件?这将允许所有其他Web安全功能保持有效,并且(我相信)仍能达到预期的效果。有趣的发现,但基于其有效性提出了一些关于该功能有效性的担忧。不起作用,我正在开发一个用户脚本——否则,为什么我要首先将粘贴复制到控制台?我尝试使用Chrome 22执行此操作,但它显示了一条警告,说明清单版本1支持正在逐步取消。关于v2中更改的文档包括“默认情况下,包的资源不再可用于外部网站(如图像的src或脚本标记)。如果您希望网站能够加载包中包含的资源,则需要通过“web_accessible_resources manifest”属性显式地将其列入白名单。这对于通过注入内容脚本在网站上构建界面的扩展尤其相关。“我想我们需要这个。加载脚本文件后,我如何使用它?我的.js文件包含一个顶级函数定义,但当我试图在Javascript控制台中调用它时,它说它没有定义。@Barmar:这个答案是在清单版本2广泛使用之前编写的。谢谢你的通知;我现在就纠正它。@Barmar:加载是异步进行的。如果在附加
脚本
标记后立即尝试使用函数,则函数调用将失败,因为脚本尚未加载。相反,您需要使用
onload
处理程序在脚本加载后运行。我只是在JavaScript控制台中键入答案中的语句,而不是将它们放在网页中。我只想要一些实用功能,我可以用手调试时使用。