2011-04-22 42 views
0

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

这里是具有spcific <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

爱德华解决了一半的问题。他添加的test()函数解决了在运行脚本的其余部分之前确定jQuery是否已加载的问题。然而,另一个问题仍然存在:小书签在某些网站上仍然没有做任何事情,比如上面列出的链接:www.laboutique.bouyguestelecom.fr还有其他想法吗? – jake 2011-04-22 20:24:07

回答

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(); 
+0

感谢您的想法。这部分工作:添加test()函数以确定jQuery是否已加载。但是,您的修订脚本不适用于计时器。所以test()函数解决了页面重新加载空白页面的问题。然而,另一个问题仍然存在:小书签在某些网站上仍然没有做任何事情,比如上面列出的链接:www.laboutique.bouyguestelecom.fr还有其他想法吗? – jake 2011-04-22 20:22:30

+0

manji很好:P – 2011-04-23 05:02:03

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); 
+0

你解决了它!非常感谢。 – jake 2011-04-22 20:32:20