是否可以部分使用外部.js文件?

时间:2013-05-02 07:43:58

标签: javascript html html5 dom

我有一个令人费解的情况(至少让我感到困惑)。

有一个由外部网站创建的外部文件“file.js”:

http://external-website.com/file.js

它里面有这个代码:

var sText= "dynamic value here";
document.write(sText);

所以基本上这个网站每N分钟重新创建一个这个文件,以便人们可以使用

将这个js文件中的值合并到他们的网站中。
<script src="http://external-website.com/file.js"></script>

BUT

我只需要变量sText。我不希望这个脚本执行document.write(sText),因为这会弄乱我的DOM(如果我理解正确的话)。理想情况下,如果此文件有一行var sText= "dynamic value here";

,我会很高兴

有没有办法使用这个JS,但是不要让它执行document.write

2 个答案:

答案 0 :(得分:1)

您可以将脚本解析为AST,然后从变量定义节点中提取字符串。请参阅this jsfiddle

首先定义外部脚本文件,如下所示:

<script type="text/x-ignore_me" src="http://external-website.com/file.js"></script>

浏览器不应识别text/x-ignore_me类型。因此,浏览器忽略该脚本。现在我们可以访问脚本的内容并使用Uglify.js解析器解析它。

var code = $("script[type='text/x-ignore_me']").text();
var ast = UglifyJS.parse(code);
var sTextContent = ast.body[0].definitions[0].value.print_to_string();
alert( sTextContent );

您可以在sText变量中找到sTextContent的内容(在此示例中为“动态值”。

作为参考,您可以找到Uglify.js解析器文档here

答案 1 :(得分:0)

执行document.write时,您可以通过fireBug或任何其他类似程序执行,检测由document.write生成的Div所呈现的类或ID

你必须覆盖渲染div的那个类或ID,然后转到display:none;  或者样式文件中的display:none !important;。 我认为这将解决您的目的,而无需触及JS文件。