用户打破域外的页面

时间:2012-10-04 05:10:47

标签: userscripts

即使我的用户脚本仅限于一个域,但我访问的任何使用Jquery的站点在我的脚本处于活动状态时都会遇到各种令人讨厌的问题。在chrome中检查错误控制台会在所有站点上显示相同的错误:

“未捕获的TypeError:对象[对象窗口]的属性'$'”

造成这种情况的原因是什么?我的目标是让我的用户脚本在使用jquery和prototype的网站上以noconflict模式运行。我没有在var = myFunction之上创建代码,所以我不知道它导致了我遇到的问题。有什么建议吗?

// ==UserScript==
// @name          Restore Dashboard Tags
// @namespace     http://userstyles.org
// @description   This script restores a user's tracked tag list to the sidebar on tumblr
// @author       
// @homepage     
// @history       1.0 first version
// @include http://www.tumblr.com/*
// @match   http://www.tumblr.com/*

// ==/UserScript==

var jQuery, $ = null;

function addJQuery(callback) {
var p = null;

if(window.opera || window.navigator.vendor.match(/Google/)) {
    var div = document.createElement("div");
    div.setAttribute("onclick", "return window;");
    p = div.onclick();
}
else {
    p = Window;
}

jQuery = $ = p.jQuery.noConflict();
callback();
}

var myFunction = function() {
jQuery('div#right_column ul:first-child').after('<ul class="controls_section" id="tracked_tags"></ul>');
jQuery('div.tracked_tags a').each(function (i) {
    var tagID = jQuery(this).attr("id");
    var tagIDNumber = tagID.replace('tag_','');
    var tagName = jQuery(this).attr("href");
    var tagNameClean = tagName.replace('/tagged/','');
    var tagContent ='';
    tagContent += '<li><a href="'+tagName+'" id="'+tagID+'" class="tag">';
    tagContent += '<div class="hide_overflow">'+tagNameClean+'</div>';
    tagContent += '<span id="tag_unread_'+tagIDNumber+'" class="count" style=""></span></a></li>';                  
    jQuery(tagContent).appendTo('div#right_column ul#tracked_tags');                                                                      
}); 
};

var NewPosts = function(){
    jQuery('div.tracked_tags > div').each(function (i) {
        var thisIndex = jQuery(this).index();
        if (jQuery(this).find('small').length){         
            var postCount = jQuery(this).find('small').text();      
            jQuery('div#right_column ul#tracked_tags li:eq('+thisIndex+')').find('.count').html(postCount.replace("new posts", "") );
        }
    });
                setTimeout(NewPosts,30000);
}


addJQuery(myFunction);
addJQuery(NewPosts);

1 个答案:

答案 0 :(得分:0)

问题已经解决了!另一个网站上的某人将罪魁祸首称为jQuery = $ = p.jQuery.noConflict();;因为我没有加载我自己的Jquery副本,所以我不需要noConflict,它的用法是将Jquery隐藏在页面的其余部分。