【问题标题】:How can I get my cross-domain Greasemonkey script to work in Chrome, even though it requires jQuery and Greasemonkey API functions?如何让我的跨域 Greasemonkey 脚本在 Chrome 中工作,即使它需要 jQuery 和 Greasemonkey API 函数?
【发布时间】:2013-01-15 12:17:55
【问题描述】:

我正在努力让用户脚本在 chrome 上工作。我知道这个问题已经被问了数百次,但我仍然无法让它发挥作用......

// ==UserScript==
// @name        SRH hide closed cases
// @namespace   srhhideclosed
// @description For hiding appeals and reports that have been closed
// @include     http://www.seriousroleplayinghell.com*
// @include     http://seriousroleplayinghell.com*
// @include     http://www.srh.im.com*
// @include     http://srh.im.com*
// @version     1
// @require     http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js
// ==/UserScript==

// Insert GM API for chrome
if (typeof GM_deleteValue == 'undefined') {
    GM_addStyle = function(css) {
        var style = document.createElement('style');
        style.textContent = css;
        document.getElementsByTagName('head')[0].appendChild(style);
    }

    GM_deleteValue = function(name) {
        localStorage.removeItem(name);
    }

    GM_getValue = function(name, defaultValue) {
        var value = localStorage.getItem(name);
        if (!value)
            return defaultValue;
        var type = value[0];
        value = value.substring(1);
        switch (type) {
            case 'b':
                return value == 'true';
            case 'n':
                return Number(value);
            default:
                return value;
        }
    }

    GM_log = function(message) {
        console.log(message);
    }

    GM_openInTab = function(url) {
        return window.open(url, "_blank");
    }

     GM_registerMenuCommand = function(name, funk) {
    //todo
    }

    GM_setValue = function(name, value) {
        value = (typeof value)[0] + value;
        localStorage.setItem(name, value);
    }
}

function toggleHidden(){
    if(GM_getValue("SRHhidden",0) == 1){
        GM_setValue("SRHhidden", 0);
    }else{
        GM_setValue("SRHhidden", 1);
    }
    hide(1000)
}

function hide(speed){
    if(GM_getValue("SRHhidden",0) == 1){
        $('s').closest('tr').fadeIn(speed);
    }else{
        $('s').closest('tr').fadeOut(speed);
    }
}

if(document.title == "Serious Roleplaying Hell - Appeals" || document.title == "Serious Roleplaying Hell - Admin/Player Abuse Reports" ){
    var TDHeads = document.getElementsByClassName("thead");
    var Head = TDHeads[1];
    var sp1 = document.createElement("div");
    sp1.style.cssFloat = "right";
    sp1.style.margin = "0 0 0 6px";
    sp1.innerHTML = "<span class='smalltext'><strong>| <a id='hideToggle'>Hide/Show closed threads</a></strong></span>";
    Head.insertBefore(sp1, Head.firstChild);
    var toggle = document.getElementById('hideToggle');
    toggle.addEventListener('click',toggleHidden,true);
    var style = "#hideToggle:hover{cursor:pointer} #hideToggle{color:#ffffff;}"
    GM_addStyle(style);

    hide(0);
}


那么它需要做什么,如果线程关闭,这个论坛会显示线程主题条纹。出于某种原因,我需要隐藏所有已关闭的线程,以便仅查看打开的线程。我在 Firefox 上运行了这个脚本,但 Chrome 不支持 @require

我试过How can I use jQuery in Greasemonkey scripts in Google Chrome?How to play nicely with jQuery and Greasemonkey。 但是,我不能在 Chrome 中工作。 有人有什么建议吗?

【问题讨论】:

    标签: jquery google-chrome cross-domain greasemonkey userscripts


    【解决方案1】:

    使用 Tampermonkey 而不是将其作为扩展程序打开

    【讨论】:

    • 是的,Tampermonkey 是最聪明最简单的方法,适用于 FF+Chrome 脚本。即使你让 jQuery 工作,this answers does nicely,你也会发现那些 GM_-function fakes 不能正常工作,因为这个脚本在多个域上运行。
    • @Bronk Adams,当然 GM 功能不会跨域保存,但大多数用户不会使用所有 4 个域。无论如何,它们只是同一个网站的别名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多