5

我想编写一个 Greasemonkey/userscript,它会自动添加到以https://pay.reddit.com/.compact开头的 URL,因此它会自动将我重定向到移动版本。

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

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

谢谢

4

2 回答 2

10

脚本应该做这些事情:

  1. 检测当前 URL 是否已经指向压缩站点。
  2. 如有必要,加载页面的精简版本。
  3. 当心“锚”URL(它们以“片段”或“哈希”(#...结尾)并说明它们。
  4. 将不需要的页面排除在浏览器历史记录之外,以便后退按钮正常工作。只有.compactURL 会被记住。
  5. 通过运行 at document-start,脚本可以在这种情况下提供更好的性能。

为此,此脚本有效:

// ==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);
}
于 2012-05-20T23:16:13.350 回答
0

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

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

不出所料,这将https://www.twitter.com等替换http://twitter.comhttps://mobile.twitter.com.

您的情况略有不同,因为如果它与某个正则表达式匹配,您想将一个字符串附加到您的 url。尝试:

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/4Vjd​​Z /3。

于 2012-05-20T16:30:42.427 回答