Javascript jquerybookmarklet由于未知原因偶尔工作
我创建了一个bookmarklet,它使用jQuery计算HTML中某些Javascript jquerybookmarklet由于未知原因偶尔工作,javascript,jquery,bookmarklet,Javascript,Jquery,Bookmarklet,我创建了一个bookmarklet,它使用jQuery计算HTML中某些和标记的出现次数,并使用alert()显示计数。它在大多数情况下都能工作,但有时会表现出两种不同的意外行为:1)单击bookmarklet时不会发生任何事情,或2)单击bookmarklet将导致页面在空白页面上仅重新加载文本“[object HtmlScript Element]”。无论搜索的特定和标记是否在此页面上,脚本都应该工作。例如,bookmarklet在stackoverflow上工作,即使它不包含特定的标记。然
和
标记的出现次数,并使用alert()显示计数。它在大多数情况下都能工作,但有时会表现出两种不同的意外行为:1)单击bookmarklet时不会发生任何事情,或2)单击bookmarklet将导致页面在空白页面上仅重新加载文本“[object HtmlScript Element]”。无论搜索的特定
和
标记是否在此页面上,脚本都应该工作。例如,bookmarklet在stackoverflow上工作,即使它不包含特定的标记。然而,它在一些网站(也没有特定的标签)如google.com上不起作用
这是一个带有spcific
标记的页面,但当单击bookmarklet时,它不会执行任何操作:
以下是bookmarklet代码的全部内容:
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);
}
有人能提供一些见解吗?您需要测试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();
您需要测试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();
像www.laboutique.bouyguestelecom.fr这样您的bookmarklet不起作用的站点已经禁用了$
别名(通过使用jQuery.noConflict()
)
不要一直使用$
符号,而是jQuery
:
alert("total div tags: " + jQuery('div[id^="inqC2C"]').length
+ "\ntotal script tags: " + jQuery('script[src*="inq.com"]').length);
像www.laboutique.bouyguestelecom.fr这样您的bookmarklet不起作用的站点已经禁用了$
别名(通过使用jQuery.noConflict()
)
不要一直使用$
符号,而是jQuery
:
alert("total div tags: " + jQuery('div[id^="inqC2C"]').length
+ "\ntotal script tags: " + jQuery('script[src*="inq.com"]').length);
谢谢你的建议。这部分起了作用:添加test()函数以确定jQuery是否已加载。但是,修改后的脚本与计时器不兼容。因此,test()函数解决了使用空白页面重新加载页面的问题。但另一个问题仍然存在:bookmarklet在一些网站上仍然没有任何作用,比如我上面列出的链接:www.laboutique.bouyguestelecom.fr还有其他想法吗?谢谢你的想法。这部分起了作用:添加test()函数以确定jQuery是否已加载。但是,修改后的脚本与计时器不兼容。因此,test()函数解决了使用空白页面重新加载页面的问题。然而,另一个问题仍然存在:bookmarklet在一些网站上仍然不起任何作用,比如我上面列出的链接:www.laboutique.bouyguestelecom.fr还有其他想法吗?爱德华解决了一半的问题。他添加的test()函数解决了在运行脚本的其余部分之前确定jQuery是否已加载的问题。然而,另一个问题仍然存在:bookmarklet在一些网站上仍然不起任何作用,比如我上面列出的链接:www.laboutique.bouyguestelecom.fr还有其他想法吗?爱德华解决了一半的问题。他添加的test()函数解决了在运行脚本的其余部分之前确定jQuery是否已加载的问题。然而,另一个问题仍然存在:bookmarklet在一些网站上仍然不起任何作用,比如我上面列出的链接:www.laboutique.bouyguestelecom.fr还有其他想法吗?