Javascript JS-为Google Translate修改bookmarklet
此页面提供用于Google Translate的bookmarklet,但是这些bookmarklet会在同一选项卡/窗口中打开Google Translate并替换原始页面。如何修改bookrmarklet代码(请参见下文)以在新窗口/选项卡中打开?还有人能简要地解释一下代码到底在做什么吗。非常感谢Javascript JS-为Google Translate修改bookmarklet,javascript,bookmarklet,google-translate,Javascript,Bookmarklet,Google Translate,此页面提供用于Google Translate的bookmarklet,但是这些bookmarklet会在同一选项卡/窗口中打开Google Translate并替换原始页面。如何修改bookrmarklet代码(请参见下文)以在新窗口/选项卡中打开?还有人能简要地解释一下代码到底在做什么吗。非常感谢 javascript: var t = ((window.getSelection && window.getSelection()) || (document.getSelect
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 Translate,需要在新窗口中传递的参数很少。如果要在新窗口中打开Google Translate,请执行以下操作:
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")
};
只有一个问题,我已经意识到,在谷歌浏览器中,它的工作正如预期的那样。但在FF 18.0.2中,它也将原始页面替换为空白,其中显示:“[对象窗口]”和URL栏包含整个脚本,如何避免这种情况,并保持原始页面显示,而无需返回一页
编辑2:
好的,我得到了它,正如这里建议的那样:我添加了void(0);在scipt的末尾
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);
干杯将
location.href='…'
更改为窗口。在两个位置打开('…')
bookmarklet代码只是检查用户是否在页面上选择了任何文本,然后在新URL中使用该文本。我的建议是将代码从更改位置改为打开新窗口。将
location.href='…'
更改为窗口。在两个位置打开('…')
bookmarklet代码只是检查用户是否在页面上选择了任何文本,然后在新URL中使用该文本。我的建议是将代码从更改位置修改为打开新窗口。为什么不在页面中添加翻译栏?如果页面还没有包含翻译栏(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);
}
}
为什么不在页面上添加翻译栏呢?如果页面还没有包含翻译栏(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);
}
}