4

我有一个令人费解的情况(至少对我来说令人费解)。

有一个由外部网站创建的外部文件“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>

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

有没有办法使用这个 JS 但不要让它这样做document.write

4

2 回答 2

1

您可以将脚本解析为 AST,然后从变量定义节点中提取字符串。看到这个 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 解析器文档。

于 2013-05-02T09:58:41.187 回答
0

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

您必须覆盖呈现的 div 的该类或 ID,并将其添加到display:none;display:none !important;的样式文件中。我认为这将在不触及 JS 文件的情况下解决您的目的。

于 2013-05-02T09:26:16.120 回答