jQuery Bookmarklet偶尔因未知原因而工作

时间:2011-04-22 19:53:45

标签: javascript jquery bookmarklet

我创建了一个bookmarklet,它使用jQuery计算HTML中某些<div><script>标记的出现次数,并使用alert()来显示计数。它大部分时间都有效,但有时会出现两种不同的意外行为:1)单击书签时不会发生任何事情,或者2)单击书签将导致页面仅使用文本重新加载:“[object HTMLScriptElement]”on一个空白页面。无论搜索的特定<div><script>标记是否出现在此页面上,该脚本都应该有效。例如,bookmarklet在stackoverflow上工作,即使它不包含特定标记。但它并不适用于某些网站(也没有特定的标签),如google.com。

这是一个包含特定<script>标记的网页,但在点击时,小书签不会执行任何操作:www.laboutique.bouyguestelecom.fr

以下是整个书签代码:

javascript:
if (typeof jQuery == 'undefined') {
    var jQ = document.createElement('script');
    jQ.type = 'text/javascript';
    jQ.onload=runthis;
    jQ.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js';
    document.body.appendChild(jQ);
} else {
    runthis();
}

function runthis() {
    alert("total div tags: " + $('div[id^="inqC2C"]').length + "\ntotal script tags: " + $('script[src*="inq.com"]').length);
}

任何人都可以提供任何见解吗?

2 个答案:

答案 0 :(得分:2)

您的书签无效的 www.laboutique.bouyguestelecom.fr 等网站已禁用$别名(使用jQuery.noConflict()

不要一直使用$符号,而是jQuery

alert("total div tags: " + jQuery('div[id^="inqC2C"]').length 
    + "\ntotal script tags: " + jQuery('script[src*="inq.com"]').length);

答案 1 :(得分:1)

你需要测试jQuery / $。偶尔失败的原因是jQuery正在被加载但在评估之前,你正在解雇你的jQuery特定调用。你需要测试jQuery:

javascript:
    function loader() {
    var jQ = document.createElement('script');
    jQ.type = 'text/javascript';
    jQ.onload=runthis;
    jQ.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js';
    document.body.appendChild(jQ);
};

function runthis() {
    if (if (typeof jQuery == 'undefined') {
        setTimeout(function() {
            loader();
        }, 300);
    } else {
        alert("total div tags: " + $('div[id^="inqC2C"]').length + "\ntotal script tags: " + $('script[src*="inq.com"]').length);
    }
};

function test() {
    if (typeof jQuery == 'undefined') {
        loader();
    } else {
        runthis();
    }
};

test();