我有一个令人费解的情况(至少让我感到困惑)。
有一个由外部网站创建的外部文件“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
?
答案 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文件。