JavaScript 流包装器,拦截 JS 文件内容

javascript stream wrapper, intercept JS file contents

本文关键字:JS 文件 拦截 包装 JavaScript      更新时间:2023-09-26

在PHP中,有一个名为stream_wrapper_register的函数。有了它,我可以获取即将包含的每个PHP文件的文件内容。所以这基本上让我可以控制将被解析的"代码"。

我想知道javascript中是否也有这样的东西?所以假设我包含我的文件:

<script type="text/javascript" src="js/myfile.js"></script>

然后,我在该文件中的代码设置流包装器(假设这在 JS 中也可用)。现在我希望能够获取将包含的所有其他 javascript 文件的文件内容:

<script type="text/javascript" src="js/somefile.js"></script>
<script type="text/javascript" src="js/someotherfile.js"></script>

但这当然必须在浏览器实际执行这些文件之前发生。

那么有没有办法以某种方式拦截它呢?

$.ajax("/path/to/javascript.js").done(function(source) {
    eval(transmogrifySourceCode(source));
});

我使用了jQuery语法,因为AJAX风格的gets这样更容易,你必须提供自己的transmogrifySourceCode函数来编辑源代码,然后再加载它。

不过,我确实想知道你为什么要这样做。您应该完全控制输入源,那么为什么不直接删除服务器上不需要的代码呢?

不,你不能。出于安全原因,您不会被允许单独获取每个脚本的内容。

对于 Opera,有一个特殊的BeforeScript事件,可以从本地用户脚本中收听。

因此,没有(好的)方法来检测(动态添加)页面中的<script>元素并阻止它们加载和执行脚本。但是,您可以通过 ajax 加载脚本文件,遵循同源策略 (!),并按照@DavidEllis建议规避其修改的内容。

否则,您需要通过服务器代理所有脚本包含并在那里修改它们。