通过Greasemonkey / Tampermonkey / Userscript将参数添加到URL(重定向)

时间:2012-05-20 16:12:16

标签: url redirect greasemonkey tampermonkey userscripts

我想写一个Greasemonkey / userscript,自动将.compact添加到以https://pay.reddit.com/开头的网址,以便自动将我重定向到移动版本。

我一直在寻找类似的用户脚本,特别是这一个:https://userscripts.org/scripts/review/112568试图弄清楚如何编辑替换模式,但我缺乏这个领域的技能。

如何编写将我从https://pay.reddit.com/*重定向到https://pay.reddit.com/*.compact的Greasemonkey脚本?

由于

2 个答案:

答案 0 :(得分:4)

脚本应该做这些事情:

  1. 检测当前URL是否已经到了紧凑型站点。
  2. 如有必要,请加载页面的精简版本。
  3. 谨防“锚点”网址(以"fragments" or "hashes" (#...)结尾)并对其进行说明。
  4. 将不需要的页面保留在浏览器历史记录之外,以便后退按钮正常工作。只会记住.compact个网址。
  5. 通过在document-start运行,脚本可以在这种情况下提供更好的性能。
  6. 为此,此脚本有效:

    // ==UserScript==
    // @name        _Reddit, ensure compact site is used
    // @match       *://*.reddit.com/*
    // @run-at      document-start
    // @grant       none
    // ==/UserScript==
    
    var oldUrlPath  = window.location.pathname;
    
    /*--- Test that ".compact" is at end of URL, excepting any "hashes"
        or searches.
    */
    if ( ! /\.compact$/.test (oldUrlPath) ) {
    
        var newURL  = window.location.protocol + "//"
                    + window.location.host
                    + oldUrlPath + ".compact"
                    + window.location.search
                    + window.location.hash
                    ;
        /*-- replace() puts the good page in the history instead of the
            bad page.
        */
        window.location.replace (newURL);
    }
    

答案 1 :(得分:0)

您展示的示例脚本使用正则表达式来操纵窗口的位置:

replace(/^https?:\/\/(www\.)?twitter.com/, 'https://mobile.twitter.com');

不出所料,这会将https://www.twitter.comhttp://twitter.com替换为https://mobile.twitter.com

您的情况略有不同,因为如果匹配某些正则表达式,您希望将字符串附加到您的网址。尝试:

var url = window.location.href;
var redditPattern = /^https:\/\/pay.reddit.com\/.*/;
// Edit: To prevent multiple redirects:
var compactPattern = /\.compact/;
if (redditPattern.test(url)
    && !compactPattern.test(url)) {
    window.location.href = url + '.compact';
}

请参阅:http://jsfiddle.net/RichardTowers/4VjdZ/3了解测试用例。