1

Greasemonkey 스크립트를 작성하여 google.com의 최상위 도메인을 변경합니다.국제 Google 사이트에 도메인 전환 선택기를 추가하는 방법은 무엇입니까?

전체 코드는 다음과 같습니다. dev 도구에서 코드를 테스트하면 선택 상자와 버튼이 표시됩니다. 그러나 버튼을 클릭하면 페이지가 다시로드되고 언어 사이트가 전환되지 않았습니다.

// ==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); 
})(); 


은 내가 greenhand 이러한 정말 화가입니다. 올바른 도메인으로 리디렉션 할 수 있으며 코드에 어떤 문제가 있습니까?

www.google.com에서 www.google.gg 또는 www.google.jp 등으로 점프하고 싶습니다.

P. 은 "루게릭 병"요소는이 문장의 컨테이너입니다 "Google.gg이 제공 : 언어"

답변

1

몇 가지 문제 :

  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 설정을 무시합니다. userscript의 전역에 this를 사용하지 마십시오 location.

  5. 를 설정할 때

  6. 당신은 프로토콜 (HTTP :, 등)가 필요합니다. this은 브라우저, 샌드 박스 상태, iframe 상태 가능 여부 등에 따라 크게 달라질 수 있습니다. this은 함수 내에서만 사용하고 참조 할 내용이 확실한 경우에만 사용하십시오.

  7. 검색된 노드가 대부분의 Google 페이지에 나타나지 않으므로 스크립트에서 오류를 확인해야합니다.

더 많은 사소한 문제가 있습니다. 스택 오버플로는 실제로 코드 검토 사이트가 아니기 때문에 생략하겠습니다. 아래의 작업 스크립트를보고 질문의 스크립트와 다른 점을 유의하십시오.

// ==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); 
} 
+0

감사합니다. 포인트 4가 가장 중요하다고 생각합니다. –

관련 문제