我已经为geocaching.com写了一个用户脚本,如果外部应用程序设置了英语,它会自动将语言切换为指定的语言(德语)。
它工作正常,直到大约10天前,我无法想象。
如果我从脚本中删除user_friends
,它会再次起作用,但会导致页面其余部分出现多个问题。
我尝试的任何@grant
(包括@grant
)都会破坏脚本。
它仍然可以在Chrome中运行。但我已经听说过,Tampermonkey和Chrome与Firefox上的Greasemonkey略有不同。
任何我想试试的想法都非常受欢迎。 这是脚本:
none
答案 0 :(得分:2)
主要问题是脚本试图分配的href
实际上是一个javascript函数。那就是:
TargetLink[0].href
的值为javascript:__doPostBack('ctl00$uxLocaleList$uxLocaleList$ctl04$uxLocaleItem','')
。
许多浏览器仍允许您将javascript:
网址传递给location.assign()
,但Firefox最近一直限制这种做法。 (请参阅GM bug 2232,Firefox bug 1192821等。)在沙箱(@grant
设置为none
以外)时尤其如此。
更好的做法是click on such links by sending mouse event(s),见下文。
该脚本的其他小问题:
@include
重叠,冗余,可能会拖延性能。下面的@match
语句应该是您所需要的。@exclude
可以缩小。LocaleList$ctl04$uxLocaleItem
这样的选择器组件非常脆弱,并且可能会随心所欲地改变。尽可能避免这些。@noframes
阻止并加快速度。考虑到所有这些,这个完整的脚本应该比旧的脚本更好地工作:
// ==UserScript==
// @name c:geo LangFix Deutsch BETA
// @match *://www.geocaching.com/*
// @exclude http://www.geocaching.com/account/messagecenter
// @exclude https://www.geocaching.com/map/*
// @version 2.0
// @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @noframes
// @grant GM_xmlhttpRequest
// ==/UserScript==
var EnglishPageIndicator = $(".selected-language > a:contains(English)");
if (EnglishPageIndicator.length) {
var GermanLnk = $(
".language-selector > .language-list > ul > li > a:contains(Deutsch)," +
".LocaleList > .language-list > li > a:contains(Deutsch)"
);
//-- Don't try to assign a JS location! Click the link instead.
var clickEvent = document.createEvent('MouseEvents');
clickEvent.initEvent ("click", true, true);
GermanLnk[0].dispatchEvent (clickEvent);
}