1

このページでは、Google 翻訳で使用するブックマークレットhttp://translate.google.com/translate_buttonsを提供していますが、これらのブックマークレットは同じタブ/ウィンドウで Google 翻訳を開き、元のページを置き換えます。新しいウィンドウ/タブで開くようにブックマークレット コード (以下を参照) を変更するにはどうすればよいですか? また、コードが実際に何をしているかを簡単に説明してください。どうもありがとう。

javascript: var t = ((window.getSelection && window.getSelection()) || (document.getSelection && document.getSelection()) || (document.selection && document.selection.createRange && document.selection.createRange().text));
var e = (document.charset || document.characterSet);
if (t != '') {
    location.href = 'http://translate.google.com/?text=' + t + '&hl=en&langpair=auto|en&tbb=1&ie=' + e;
} else {
    location.href = 'http://translate.google.com/translate?u=' + encodeURIComponent(location.href) + '&hl=en&langpair=auto|en&tbb=1&ie=' + e;
};

編集:@DGによると。コードを次の実用的なソリューションに変更しました。

javascript: var t = ((window.getSelection && window.getSelection()) || (document.getSelection && document.getSelection()) || (document.selection && document.selection.createRange && document.selection.createRange().text));
var e = (document.charset || document.characterSet);
if (t != '') {
    window.open('http://translate.google.com/?text=' + t + '&hl=en&langpair=auto|sk&tbb=1&ie=' + e)
} else {
    window.open('http://translate.google.com/translate?u=' + encodeURIComponent(location.href) + '&hl=en&langpair=auto|sk&tbb=1&ie=' + e)
};

ただし、これにより Google 翻訳が新しいタブで開きます。Google 翻訳を新しいウィンドウで開きたい場合は、 window.open() を渡す必要がある引数がさらにいくつかあります。

javascript: var t = ((window.getSelection && window.getSelection()) || (document.getSelection && document.getSelection()) || (document.selection && document.selection.createRange && document.selection.createRange().text));
var e = (document.charset || document.characterSet);
if (t != '') {
    var url1 = 'http://translate.google.com/?text=' + t + '&hl=en&langpair=auto|sk&tbb=1&ie=' + e;
    window.open(url1, '_blank', "GoogleTranslate", "height=200,width=200")
} else {
    var url2 = 'http://translate.google.com/translate?u=' + encodeURIComponent(location.href) + '&hl=en&langpair=auto|sk&tbb=1&ie=' + e;
    window.open(url2, '_blank', "GoogleTranslate", "height=200,width=200")
};

1 つだけ質問があります。Google Chrome では期待どおりに動作していることに気付きました。しかし、FF 18.0.2 では、元のページが "[object Window]" と表示されている空白に置き換えられ、URL バーにはスクリプト全体が含まれています。これを回避し、1 ページ戻る必要なく元のページを表示したままにする方法

EDIT2:わかりました、ここで提案されたので、[オブジェクトウィンドウ]とは何ですか? void(0); を追加しました。スクリプトの終わりに。

javascript: var t = ((window.getSelection && window.getSelection()) || (document.getSelection && document.getSelection()) || (document.selection && document.selection.createRange && document.selection.createRange().text));
var e = (document.charset || document.characterSet);
if (t != '') {
    var url1 = 'http://translate.google.com/?text=' + t + '&hl=en&langpair=auto|sk&tbb=1&ie=' + e;
    window.open(url1, '_blank', "GoogleTranslate", "height=200,width=200")
} else {
    var url2 = 'http://translate.google.com/translate?u=' + encodeURIComponent(location.href) + '&hl=en&langpair=auto|sk&tbb=1&ie=' + e;
    window.open(url2, '_blank', "GoogleTranslate", "height=200,width=200")
};
void(0);

乾杯

4

2 に答える 2

1

2箇所にlocation.href = '...'変更。window.open('...')

ブックマークレット コードは、ユーザーがページ上のテキストを選択したかどうかを確認し、そのテキストを新しい URL で使用するだけです。私の提案は、コードを場所の変更から新しいウィンドウを開くように変更することです。

于 2013-05-08T18:23:28.343 に答える
0

翻訳バーをページに追加してみませんか? ページに翻訳バー (div.skiptranslate 内の iframe) がまだ含まれていない場合は、翻訳 JavaScript を挿入することによって読み込まれる google.translate.TranslateElement 関数を確認するまで待機し、それを呼び出してツールバーを描画します。 .

(function () {
  function loadJS(url, callback) {
    var s = document.createElement('script');
    s.src = url;
    if (s.addEventListener) {
      s.addEventListener('load', callback, false);
    } 
    else {
      s.onreadystatechange = function () {
        if (this.readyState == 'complete') {
          callback();
          s = null;
        }
      }
    }
    s.type = 'text/javascript';
    document.getElementsByTagName('head') [0].appendChild(s);
  };
  loadJS('https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit', function () {
    window.setTimeout(doTrans, 100);
  });
})();

function doTrans()
{
  if (!document.querySelector("div.skiptranslate")) {
    if (typeof google != "undefined" && typeof google.translate != "undefined" && typeof google.translate.TranslateElement != "undefined")
      new google.translate.TranslateElement({layout:google.translate.TranslateElement.InlineLayout.SIMPLE,autoDisplay:true},null);
    window.setTimeout(doTrans, 100);
  }  
}
于 2016-09-05T05:11:33.290 に答える