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

时间:2010-05-30 04:57:32

标签: javascript jquery 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();

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

也许你在完成下载和解析之前尝试使用jQuery。

答案 2 :(得分:0)

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

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

顺便说一下:使用google的文件很好,但只有正确加载才能使用!

答案 3 :(得分:0)

您可以使用回调修复它:

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

createScript("id1", "//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js", function () {
    document.write('Loaded');
});