jQuery Bookmarklet работает спорадически по неизвестной причине - PullRequest
0 голосов
/ 22 апреля 2011

Я создал букмарклет, который использует jQuery для подсчета количества вхождений определенных тегов <div> и <script> в HTML и использования alert () для отображения количества. Он работает большую часть времени, но иногда демонстрирует два разных неожиданных поведения: 1) ничего не произойдет, когда вы щелкнете по букмарклету, или 2) щелчок по букмарклету приведет к перезагрузке страницы только с текстом: «[object HTMLScriptElement]» в пустая страница. Сценарий должен работать независимо от того, присутствуют ли на этой странице конкретные теги <div> и <script>, которые нужно найти. Например, букмарклет работает со стековым потоком, даже если он не содержит определенных тегов. Тем не менее, он не работает на некоторых сайтах (которые также не имеют специальных тегов), таких как 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 ]

2 голосов
/ 23 апреля 2011

Сайты, такие как 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 голос
/ 23 апреля 2011

Вам нужно проверить на 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();
...