Javascript 为什么这段bookmarklet代码说,即使包含jQuery,也没有定义jQuery?

Javascript 为什么这段bookmarklet代码说,即使包含jQuery,也没有定义jQuery?,javascript,jquery,bookmarklet,Javascript,Jquery,Bookmarklet,我正在创建一个bookmarklet,下面的代码在第一次尝试时不起作用。当我转到一个页面时,它会说“jQuery未定义”。但是,如果我再次单击它,它会完美工作吗 var qrcodetogo = { jQURL: 'http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js', jQUIURL: 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.1/jquery-ui.min.

我正在创建一个bookmarklet,下面的代码在第一次尝试时不起作用。当我转到一个页面时,它会说“jQuery未定义”。但是,如果我再次单击它,它会完美工作吗

var qrcodetogo = {
jQURL: 'http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js',
jQUIURL: 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.1/jquery-ui.min.js',
jQUIThemeURL: 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.1/themes/ui-lightness/jquery-ui.css',
init: function(){
    this.createLink('qrcodetogo_UI-Lightness', this.jQUIThemeURL);
    this.createScript('qrcodetogo_jQuery', this.jQURL);
    this.createScript('qrcodetogo_jQueryUI', this.jQUIURL);
    this.createHiddenDiv('qrcodetogo_dialog','This is a Test.');
    jQuery.noConflict();
},

showQRCode: function() {
    jQuery('#qrcodetogo_dialog').dialog();
},

createLink: function(id, url) {
    var l = document.createElement('link');
    l.href = url;
    l.rel = 'stylesheet';
    l.type = 'text/css';
    l.media = 'screen';
    l.charset = 'utf-8';
    document.getElementsByTagName('head')[0].appendChild(l);
},

createScript: function(id, url) {
    var s = document.createElement('script');
    s.src = url;
    s.id = id;
    document.getElementsByTagName('head')[0].appendChild(s);
},

createHiddenDiv: function(id, body) {
    var div = document.createElement('div');
    div.id = id;
    div.innerHTML = body;
    div.style.display = 'none';
    document.getElementsByTagName('body')[0].appendChild(div)
}
}

qrcodetogo.init();
qrcodetogo.showQRCode();

可能您正在尝试在jQuery完成下载和解析之前使用它。

您正在从Google下载代码,很可能您的页面正在从Google完全下载实际库之前加载并运行jQuery代码。。。 您应该将文件放在页面所在的位置

或者,您可以在索引页面中包含jquery库,从而在调用它之前使它可用于整个网站


顺便说一句:使用谷歌的文件是好的,但只有在正确加载的情况下

动态添加的脚本标记将进入队列:首先,您的代码将执行到底,然后是队列中已有的任何其他代码(例如,其他onclick事件处理程序),然后才是脚本标记中的代码。将依赖jQuery的代码放在单独的函数中,并将其设置为脚本标记的onload事件的事件处理程序。

您可以通过回调来修复它:

var createScript=函数(id、url、回调){
var s=document.createElement('script');
s、 src=url;
s、 id=id;
s、 addEventListener(“加载”,回调);
document.getElementsByTagName('head')[0]。appendChild;
};
createScript(“id1”,“//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js”,函数(){
文件。写入(“加载”);
});