Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript document.write动态加载脚本_Javascript_Jquery_Html - Fatal编程技术网

Javascript document.write动态加载脚本

Javascript document.write动态加载脚本,javascript,jquery,html,Javascript,Jquery,Html,我正在尝试动态加载脚本。这是我的代码: document.write('<script type="text/javascript">window.jQuery || document.write(\"<script src=\'http://code.jquery.com/jquery-1.10.2.min.js\'></script>\")</script>'); 这在B.js中,它作为脚本加载到A.html中。但我有一个错误。双引号内的结束

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

document.write('<script type="text/javascript">window.jQuery || document.write(\"<script src=\'http://code.jquery.com/jquery-1.10.2.min.js\'></script>\")</script>');
这在B.js中,它作为脚本加载到A.html中。但我有一个错误。双引号内的结束脚本标记被视为嵌套脚本标记并中断代码

有没有办法解决这个问题?

使用:

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);

代表始终使用CDN是一种很好的方法,但有时如果CDN出现故障会发生什么,尽管这种可能性很小,但你永远不知道在这个世界上会发生什么

下面给出的jQuery代码检查jQuery是否是从googlecdn加载的,如果不是,那么它将引用文件夹中的jQuery.js文件

<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
<script type="text/javascript">
if (typeof jQuery == 'undefined') 
{
document.write(unescape("%3Cscript src='Scripts/jquery.1.9.1.min.js' type='text/javascript'%3E%3C/script%3E"));
}
</script>
它首先从GoogleCDN加载jQuery,然后检查jQuery对象。如果jQuery未成功加载,则它将从硬盘驱动器位置引用jQuery.js文件。在这个例子中,jQuyr.js从脚本文件夹中加载。

从它最里面的嵌套开始,中断您的字符串,并且每次考虑它将被解释到哪里,因此它需要如何编码。 这个HTML将在字符串、转义引号和反斜杠中,并在嵌套中上升一级

window.jQuery | | document.write; 这个脚本将包含在HTML、转义标记和嵌套中

window.jQuery | | document.write; 这个HTML将在字符串、转义引号和反斜杠中,并在嵌套中上升一级

document.write'window.jQuery | | document.write\\;'; 这将作为外部脚本加载,这样我们就完成了


我选择使用..来断开标签。。样式,因为我发现它更容易逃逸。

是的,不要使用document.write。改为使用DOM操作。@Cerbrus无法将可执行脚本执行到DOM@YuriyGalanter:无法将可执行脚本写入DOM->无法执行什么?跑插入不管怎样,你都不需要。只需检查jQuery,而不是document.write。如果jQuery不存在,请使用DOM操作加载脚本。我喜欢使用$head xD的方式,jQuery以一种特殊的方式处理标记。内部标记只是在破坏代码。除此之外,解决方案是正确的。嗯,我想我没有正确地解释这一部分。@PaulS.:jquery之美….:d这种美对我来说是无效的,因为如果您看到我的代码,我将尝试动态加载jquery:我已经尝试过了。它仍然不起作用。我没有意识到你需要用JavaScript转义/s。'\/'='/';//true@PaulS. — 正如我所解释的,在JavaScript中,和是等价的。在HTML中,它们是不同的。@Jack-哦,该死,这是嵌套…我会更新答案。@Quentin:谢谢,但它仍然不起作用。你可以自己试试
if (!window.jQuery) {
  document.write("<script src='http://code.jquery.com/jquery-1.10.2.min.js'><\/script>";
}
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
<script type="text/javascript">
if (typeof jQuery == 'undefined') 
{
document.write(unescape("%3Cscript src='Scripts/jquery.1.9.1.min.js' type='text/javascript'%3E%3C/script%3E"));
}
</script>