4

I am trying to include jQuery from a javascript file. I have tried the following, although it doesn't work.

var script = '<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>';
document.getElementsByTagName('head')[0].appendChild(script);
4

7 回答 7

8

</script>关闭开始<script>块,即使它在字符串中。我会这样做:

(function() {
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = document.location.protocol + '//code.jquery.com/jquery-1.9.1.min.js';

    document.getElementsByTagName('head')[0].appendChild(script)
})();
于 2013-05-03T23:31:57.030 回答
1

您不能</script>在脚本块内有任何地方,甚至在字符串内也不能,因为它将在那里结束脚本块。

分解字符串中的结束标记:

var script = '<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></scr'+'ipt>';
于 2013-05-03T23:32:06.327 回答
1
 (function() {
        var script = document.createElement('script');
        script.type = "text/javascript"; // keeping older browsers happy. 
        script.src = window.location.protocol + '//code.jquery.com/jquery-1.9.1.min.js';
        // browsers prevent cross-protocol downloading.
        (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(script);// In Opera a site can get by without a <head>
    })();
于 2013-05-03T23:35:25.383 回答
1

只需使用 jQuery getScript() 方法加载 jQuery:http ://api.jquery.com/jQuery.getScript/

...只是在开玩笑。

试试这个代码:

var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'http://code.jquery.com/jquery-1.9.1.min.js';
head.appendChild(script);

来自:http ://unixpapa.com/js/dyna.html

此外,如果在 https 页面上使用,您需要从与 https 兼容的 CDN 加载脚本,例如 Google 托管库 (src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery .min.js")

于 2013-05-03T23:37:45.643 回答
0
var script = document.createElement('script');
script.src = 'http://code.jquery.com/jquery-1.9.1.min.js';
document.getElementsByTagName('head')[0].appendChild(script);
于 2013-05-03T23:32:45.100 回答
0

使用一个小的可重复使用的脚本加法器:

function fetch(url){
 var d=document, s='script';
 d.getElementsByTagName(s)[0].parentNode.appendChild(d.createElement(s)).src=url;
}

fetch('//code.jquery.com/jquery-1.9.1.min.js');

并非所有页面在所有浏览器中都有 HEAD,但如果脚本正在运行,那么同级脚本标签也可以......

于 2013-05-04T00:19:03.157 回答
-1

首先,变量脚本包含</script>你不能让它在你的代码中出现的序列,因为浏览器会假设(并且必须)它是<script>标签关闭的。例如,如果您的脚本代码包含语法错误,这是一个没有关闭的字符串变量,"它看起来像

<script>var bad = "abcd ;</script>

要解决这个问题,您可以像这样破坏</script>字符串"</scr" + "ipt>",也可以将其转义:"<\/script>"

所以:

var script = '<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"><\/script>';
document.getElementsByTagName('head')[0].appendChild(script);

第二件事是该appendChild()函数接受节点元素而不是字符串

所以:

var script = document.createElement("script");
script.src = "http://code.jquery.com/jquery-1.9.1.min.js";
document.getElementsByTagName("head")[0].appendChild(script);

无论如何,我更喜欢使用像RequireJS这样的模块和 JavaScript 加载器。

于 2013-05-03T23:49:17.237 回答