javascript - 如何向国际 Google 网站添加域切换选择器?

标签 javascript internationalization greasemonkey html-select

我正在编写一个 Greasemonkey 脚本来更改 google.com 的顶级域。

完整代码如下。在开发工具中测试我的代码,它确实显示了选择框和按钮。但是,当我单击该按钮时,页面只是重新加载,它没有切换语言站点。

// ==UserScript==
// @name       GoogleFieldExpress
// @namespace  http://example.gg/
// @version    1.0
// @description  to change field from database
// @match      http://www.google.*/
// @match      https:/www.google.*/
// @copyright  2013,Matthew
// ==/UserScript==

//database domains and varibles
var domains=new Array;
domains=["gg","jp"];
var current="";
if (typeof this.href === "undefined") {
    current = document.location.toString().toLowerCase();
}
else {
   current = this.href.toString().toLowerCase();
}
var inner='\
    <center>\
    <strong>\
        Choose field below: <br />\
    </strong>\
    <form id="choose" >\
    <select id="select_item">'
for (var i = 0; i < domains.length; i++) {
    inner+='<option value="'+domains[i]+'"\\>'+domains[i]+'</option>';
};


inner+='</select>\
    <button id="goto2">go!</button>\
    </form>\
    </center>\
'

//functions
function getLanguageElement(){
    var lang=document.getElementById("als");
    return lang;
}
function appendHTML(element,html){
    element.innerHTML+=html;
}
//main process
(function(){
appendHTML(getLanguageElement(),inner);
document.getElementById("goto2").addEventListener("click",function(){windows.location=new String('www.google.')+(document.getElementById("select_item").value)},false);
})();


我是个新手,对这些真的很生气。 如何重定向到正确的域以及我的代码有什么问题?

我想从 www.google.com 跳转至www.google.ggwww.google.jp等等。

附注“als”元素是“Google.gg提供的语言:语言”这句话的容器

最佳答案

几个问题:

  1. http://www.google.*/https:/www.google.*/invalid values for @match 。使用:

    // @include    http://www.google.*/
    // @include    https://www.google.*/
    
  2. jp似乎是一个无效的域。 Google 似乎使用 co.jp .

  3. windows不是有效的对象或变量。

  4. 通过使用<form>和一个 <button>使用默认类型,单击“go!”实际上提交了表格!这会覆盖尝试设置位置 URL。

  5. 设置location.时需要协议(protocol)(http:等)

  6. 请勿使用 this在用户脚本的全局范围内。 this将根据以下因素显着变化:浏览器、沙箱状态、可能的 iframe 状态等。使用 this仅在函数内部并且仅当您确定它将引用什么时。

  7. 该脚本需要进行错误检查,因为大多数 Google 页面上都不会出现所查找的节点。

还有几个小问题 - 我将跳过这些问题,因为 Stack Overflow 并不是真正的代码审查网站。只需查看下面的工作脚本,并注意它与问题脚本的不同之处。

// ==UserScript==
// @name       GoogleFieldExpress
// @namespace  http://example.gg/
// @version    1.0
// @description  to change field from database
// @include    http://www.google.*/
// @include    https://www.google.*/
// ==/UserScript==
//database domains and variables
var domains = ["gg", "co.jp"];
var current = location.host;  // or location.href. Case-sensitive for a reason
var inner   = '\
    <center>\
    <strong>\
        Choose field below: <br />\
    </strong>\
    <form id="gmChoose">\
    <select id="gmSelect_item">'
;

domains.forEach ( function (item) {
    inner  += '<option value="' + item + '"\\>' + item + '</option>';
} );

inner      += '</select>\
    <button id="gmGoto2" type="button">go!</button>\
    </form>\
    </center>\
';

//main code
var lang = document.getElementById ("als");
if (lang) {
    lang.innerHTML += inner;

    document.getElementById ("gmGoto2").addEventListener ("click", function () {
        location.assign (
            location.protocol + '\/\/www.google.'
            + document.getElementById ("gmSelect_item").value
            + '\/'
        );
    }, false);
}

关于javascript - 如何向国际 Google 网站添加域切换选择器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16339279/

相关文章:

java - 为 en-US 和 en_US 创建语言环境有什么区别?

javascript - 如何在 greasemonkey 中进行同步 AJAX 调用?

javascript - 如何使用 selenium web 驱动程序单击导航栏

internationalization - Symfony 1.4 形式,有条件地以嵌入式形式抛出 sfValidatorError

javascript - 谷歌翻译 JavaScript

javascript - 通过 window.location 更改 URL 后如何运行代码?

javascript - MutationObserver错误: How could I wait for the creation of an element?

javascript - 检测点击外部元素

javascript - 改变计算属性中的数据也更改了 vuex 存储中的数据 : why? 感谢任何帮助

javascript - Google map 未按预期显示