document.write动态加载脚本

我正在尝试动态加载脚本。 这是我的代码:

document.write('window.jQuery || document.write(\"\")'); 

这是在B.js里面,它作为脚本加载到A.html上。 但我得到错误。 双引号内的结束脚本标记被视为嵌套脚本标记并破坏代码。

任何想法如何解决这一问题?

表示在JavaScript字符串文字中。

转义/保持JavaScript解析器的含义相同,但HTML解析器的含义不同。

由于您的HTML包含包含HTML的JavaScript,其中包含包含HTML(!!!)的JavaScript,因此您必须双重逃避最内层的JavaScript。

我认为这会奏效:

 document.write(' 

...但它很糟糕,生成一个新的脚本元素似乎没有什么意义,只是为了决定是否要生成一个新的脚本元素。 你会得到相同的结果:

 if (!window.jQuery) { document.write(" 

使用:

 var s = document.createElement("script"); s.type = "text/javascript"; s.src = "http://somedomain.com/somescript"; $("head").append(s); //or using plain js (document.getElementsByTagName("head")[0] || document.documentElement).appendChild(s); 

动态负载的jquery库JavaScript的

总是使用CDN是一种很好的方法,但有时如果CDN出现故障(尽管很少见),但在这个世界上你永远不会知道任何事情都会发生。

下面给出jQuery代码检查jQuery是否从Google CDN加载,如果没有,则它从你的文件夹中引用jQuery.js文件。

   

它首先从Google CDN加载jQuery,然后检查jQuery对象。 如果没有成功加载jQuery,那么它将从硬盘驱动器位置引用jQuery.js文件。 在此示例中,jQuery.js是从Scripts文件夹加载的。

从它最内层的嵌套开始打破你的字符串 ,每次都考虑它将被解释的位置,以及它如何被编码。

  

HTML将位于String ,转义引号反斜杠内,并在嵌套中上升

 window.jQuery || document.write(""); 

这个脚本将在HTML ,转义标记内,并在嵌套中上升

  

HTML将位于String ,转义引号反斜杠内,并在嵌套中上升

 document.write(''); 

这将作为外部脚本加载,所以我们完成了。

我选择使用"<"+"tag>..<"+"/tag>"样式来破坏标签,因为我发现它更容易逃脱。