直接从浏览器执行JavaScript文件

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (51)

这听起来像一个琐事问题,但我真的需要知道。

如果您将HTML文件的URL放入浏览器的位置栏中,它将呈现该HTML。这是浏览器的全部目的。

如果你给它一个JPG,SWF,甚至PDF,它将为这些数据类型做正确的事情。

但是,如果您给它一个JavaScript文件的URL,它将显示该文件的文本。我想要的是直接执行该文件。

现在,我知道如果您使用javascript:协议,它将执行URL 的文本,但这不是我所需要的。

我可以让URL指向一个由单个<script>标签组成的HTML文件,该标签又指向JavaScript文件,但由于我自己的隐匿原因,我无法做到这一点。

如果文件http://example.com/file.js完全由...组成

 alert("it ran");

然后我将该网址放置在地址栏中,我想让它“运行”以弹出警报。

我怀疑这是可能的,但我希望希望有一个标题或一个MIME类型或类似的东西,我可以设置和奇迹般地做到这一点。

提问于
用户回答回答于

这不可能。浏览器不知道JavaScript应该在哪个上下文中运行; 例如,什么属性window?如果你认为它可以提出一些随机的默认值,那么行为document呢?如果有人做了document.body.innerHTML = "foo"什么应该发生?

与图像或HTML页面不同,JavaScript取决于它运行的上下文。该上下文可以是HTML页面,也可以是Node服务器环境,或者甚至可以是Windows Scripting Host。但是,如果你只是导航到一个URL,浏览器不知道它应该运行脚本的上下文。

作为一种解决方法,可能about:blank用作主页。然后,您可以将脚本插入到文档中,通过将以下内容粘贴到URL栏中,为其提供适当的执行上下文:

javascript:(function () { var el = document.createElement("script"); el.src = "PUT_URL_HERE"; document.body.appendChild(el); })();
用户回答回答于

不是直接的,但你可以制作一个简单的服务器端脚本,例如在PHP中。代替

http://example.com/file.js

导航:

http://localhost/execute_script.php?url=http://example.com/file.js

当然,你可以通过RewriteRule在Apache中使用和/或在你的主机文件中添加另一个重定向到的项127.0.0.1

请注意,这在安全性方面并不是很好,但如果您自己使用它并知道您要下载的内容,则应该没问题。

<html>
 <head>

  <script>
   <? echo file_get_contents($_GET['url']); ?>
  </script>

 </head>

 <body>

 </body>
</html>

扫码关注云+社区