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

时间:2012-05-29 19:02:06

标签: javascript

在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>

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

有没有办法以某种方式拦截?

2 个答案:

答案 0 :(得分:2)

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

我使用了jQuery语法,因为AJAX样式的获取方式更容易,并且在加载之前你必须提供自己的transmogrifySourceCode函数来编辑源代码。

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

答案 1 :(得分:0)

不,你不能。出于安全原因,您将无法获得每个脚本的内容。

对于Opera,有一个特殊的BeforeScript event can be listened to来自本地用户脚本。

因此,没有(好的)方法可以检测页面中的(动态添加的)<script>元素,并防止它们加载和执行脚本。然而,您可以通过ajax加载脚本文件,尊重同源策略(!),并按照@DavidEllis建议评估修改后的内容。

另外,您需要代理服务器上的所有脚本内容并在那里修改它们。