我创建了一个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);
}
任何人都可以提供任何见解吗?
答案 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();