Also, wie auch immer, das Skript von lenny2 funktioniert bei mir nicht.
v139.0b4 security.allow_unsafe_dangerous_privileged_evil_eval set to true
Also, wie auch immer, das Skript von lenny2 funktioniert bei mir nicht.
v139.0b4 security.allow_unsafe_dangerous_privileged_evil_eval set to true
Ah! security.allow_unsafe_dangerous_privileged_evil_eval set to true
Daher weht der Wind. Möchte ich nicht, da der Sicherheitslevel herabgesetzt wird.
(Aber ich werde es auch testen) Moment. ....
Ja, tatsächlich, funktioniert mit den "Schalter"
security.allow_unsafe_dangerous_privileged_evil_eval auf true
Dann war es wohl ein Anwendungsfehler meinerseits. denke ich.
Bei dir stand etwas von Weiterleitungen.
ja, weil es teils auch Weiterleitungen blockiert auf andere Seiten siehe Beispiel 2 und 3 in diesem Post.
Ja, tatsächlich, funktioniert mit den "Schalter"
Wenn es um das Skript von lenny2 aus Beitrag #13 geht, da muss der Schalter auf true gesetzt werden, denn in Zeile 156 wird die Funktion eval() verwendet. In Zeile 13 wird dann noch Function verwendet, das ebenfalls mit dem Wert false blockiert werden könnte.
Yes!
Ich habe meine französiche Freundind gefragt ob sie mir helfen könnte,
das Skript so umzuschreiben, dass es auch ohne
security.allow_unsafe_dangerous_privileged_evil_eval => "true"
funktionieren würde.
War nicht ganz so trivial, aber nach einigen Versuchen haben wir es hinbekommen.
location.href.endsWith("://browser/content/browser.xhtml") && (async () => {
await delayedStartupPromise;
var addEventListener = (...args) => {
var trg = args[3];
if (!trg) trg = args[3] = window;
trg.addEventListener(...args);
this.handlers.push(args);
};
var initFunction = async function(_id, xhtmlns, addDestructor, addEventListener, gClipboard, LOG) {
// Hier ist der Code, der ursprünglich als String in new Function() übergeben wurde
var langFrom_google_text = "auto"; //auto
var langTo_google_text = "de";
// Assign icons
var mainicon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADKElEQVR42p2TX2hTdxTHPzfJTW6T3qQmapvWabUbog+udp3kYeLQ4f6wiZQNtjlXHyZaBYe6TekYVGRQYexFscOtuD7UdWxzMtAXEbZStKIbDsaUCbVj9o8mTW+aNrlJbu5vJ8Ex2OMO/Lj87jnne873nO9PSyTV3tkAfYi5NhQ1MB1Ijc3ijN+D7CQh28YK+GHDMyxpjlJTkmAdQi5dWvOsUrYkGB5QC5Kcg/aFBxxqqycmcY38a/1yTqYgMw8ByfFKjtZ4V6myCeW8IApyfOw2155fw1DG4dOJJK1r45x5BPDUpZuMr2uXSuAvgBMQgOitjLJNn7iDSJP0rIJ35dt19TeGoi0Es1MMP72KFvm3+88phuYM3HCd3ObQizpa/cW7Kh020E0Tz1yOUxvjdIr7o6t/cLpkEJqZp7s5zN62ZewfnWLQ9VIIBqodBdI5tIbBG8oKhSAaJZDN8tpSP5+3L8eVgLbeAdKal7NH3mKL3FcOXCfV1ITjc7FLFrWZIlpt/4+qEA7hLRrCwk/RusOXu7ax8xHvGTkVgi/89As/T8ia9EUyghKOWSaYyqNx8oIiuEgcshetsooceibJinvTfNH1DpseD3LHSZE4eprs6k24NQaevI1fF8q5FJqv9xvlmFLdkKZlhb77E8TdIlFD54OOl3mzdXm1k+sP0jzbdwF7cRhsj8ysAWYnpYPeQfXPnn3JJG8/sZT+PW8gkuDbkWEiRh3b29dV/edujNE5dB4nHJSCUrQsTdP9mUKrCKHA5piHK+918quVp/VoD9W9uhGejNRx6+N9VZAmoTJZmhbK4vR7BGDPCQEQ/qU8R15aT2/Hi/R8PcyxyyMyVBmaXwIfPiTVf5yYHiF28ARpOyuqk3nJ4DV2HFc4SamUZ3vrGr7vPlitFNraQc4SzZZt6ptWMv3DAOdGrrGj7yvR+2KYr5A0BeCVAwqvBQuyMG+MTzp3cvj15/ivfXfzNq++/yFEIlD7GFjZ6uPRaE4oGuNQI68jIINJu0QbTFoadIJlL7lSgb8sxbSVEb8geUUVtkh55r50MY5Wec6jibV9/A9LjP7e9TdFQScjW9P1XAAAAABJRU5ErkJggg==";
function GetXmlHttpObject() {
if (window.XMLHttpRequest) { return new XMLHttpRequest(); }
if (window.ActiveXObject) { return new ActiveXObject("Microsoft.XMLHTTP"); }
return null;
}
var lc = navigator.lastClick = {};
addEventListener("mouseup", e => {
if (e.button) return;
lc.X = e.screenX - mozInnerScreenX;
lc.Y = e.screenY - mozInnerScreenY;
}, false, gBrowser.tabpanels || 1);
var createWindow = function(text, status, title, id, pos, size) {
var win = window, doc = win.document, wId = 'ujs_window' + (id || ''), w = doc.getElementById(wId);
var keyDown = function(e) {
if (!e.shiftKey && !e.ctrlKey && !e.altKey && e.keyCode == 27) doc.getElementById(wId).closeWin();
};
if (w) w.closeWin();
gBrowser.addEventListener("click", function c() {
this.removeEventListener("click", c);
try { doc.getElementById(wId).closeWin(); } catch (e) {};
}, true);
w = doc.createElementNS(xhtmlns, 'div');
w.setAttribute('style', 'position:fixed;display:block;visibility:hidden;left:0;top:0;width:auto;height:auto;border:1px solid gray;padding:2px;margin:0;z-index:99999;overflow:hidden;cursor:move;' + (typeof w.style.borderRadius === 'string' ? 'background-color:#eaeaea;padding-top:0px;border-radius:4px;box-shadow:0 0 15px rgba(0,0,0,.4);' : 'background:-o-skin("Window Skin");'));
w.id = wId;
w.closeWin = function() {
doc.removeEventListener('keydown', keyDown, false);
this.parentNode.removeChild(this);
};
w.addEle = function(str, style) {
var ele = doc.createElementNS(xhtmlns, 'div');
ele.setAttribute('style', style);
if (str) {
ele.innerHTML = str;
for (var el, all = ele.getElementsByTagName('*'), i = all.length; i--;) {
el = all[i];
if (/^(script|frame|iframe|applet|embed|object)$/i.test(el.nodeName)) {
el.parentNode.removeChild(el);
} else {
for (var att = el.attributes, j = att.length; j--;) {
if (/^on[a-z]+$/i.test(att[j].name)) att[j].value = '';
}
}
}
}
return this.appendChild(ele);
};
w.addEle1 = function(str, style) {
var ele = doc.createElementNS(xhtmlns, 'textarea');
ele.setAttribute('style', style);
if (str) {
ele.innerHTML = str;
for (var el, all = ele.getElementsByTagName('*'), i = all.length; i--;) {
el = all[i];
if (/^(script|frame|iframe|applet|embed|object)$/i.test(el.nodeName)) {
el.parentNode.removeChild(el);
} else {
for (var att = el.attributes, j = att.length; j--;) {
if (/^on[a-z]+$/i.test(att[j].name)) att[j].value = '';
}
}
}
}
return this.appendChild(ele);
};
var img = doc.createElementNS(xhtmlns, 'div');
img.setAttribute('style', 'display:block;float:right;width:22px;height:22px;padding:0;margin-top:2px;margin-right:1px;border:none;cursor:pointer;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAIAAABL1vtsAAAACXBIWXMAAArEAAAKxAFmbYLUAAABc0lEQVQ4y2P84mzGQBlgYaAYoBjBrKn79/plgnrQlCGM4Jwwj0lC6kdjKX5TmDV1Oeq7/7149r0gCcUIZk1dJgkpBgYGjvruXyvm/96wErt+fWOOylYGBgYmCSm4WxjhwQkxHsL+vW39r0Uz0f3s6M6eVsDAyMjAwIDsWEbkGGHW1OWoaGFgZ8c0BaH///8fHbV/L56BSzGiRSqztj5HWROaKcj6f86e+GffDmQtjJjpAs2Uf48f4NGP3Qg0U6AAh36cRkBNqWhmYGWDcH/OmoBVP77UySgmwcDCCucyyciTlsCRw4/hz28GVjZWr0AGBgbMmMZuBFr4/3/5nKOskYGdA5cp6GGBNf6YtfUhpmBNdShGsFjas+dVYI0/ZFN+zZ/2e+cmLEYgEjiO+MNlCtQI5Azyc1L7n2MHsQYzk4o6Z8tECBtuCjQ4/16//O/FM4KZ/d+dm99r8jlbJv69eRXdFSQVOUwq6v/u3CScOuladgIAhMrZgyTDTBwAAAAASUVORK5CYII=");background:-o-skin("Caption Close Button Skin");');
img.title = (win.navigator.language.indexOf('de') == 0) ? '\u0417\u0430\u043A\u0440\u044B\u0442\u044C' : 'Close';
img.addEventListener('click', function() { this.parentNode.closeWin(); }, false);
w.appendChild(img);
var title = w.addEle(title, 'display:table;color:#000;font:17px Times New Roman;width:auto;height:auto;padding:0;margin:0 2px;cursor:text;');
title.onclick = e => {
e.preventDefault();
var url = e.target.href;
var ctabpos = gBrowser.selectedTab._tPos + 1;
gBrowser.moveTabTo(gBrowser.selectedTab = gBrowser.addWebTab(url), ctabpos);
doc.getElementById(wId).closeWin();
};
var cnt = w.addEle1(text, 'display:block;border:1px solid #aaa;padding-bottom:3px;padding-left:3px;background-color:#f2ffe6;color:#8c0023;font:24px Times New Roman;width:600px;height:200px;overflow:auto;cursor:text;-moz-user-focus:normal;-moz-user-select:text;');
cnt.contentEditable = "true";
cnt.context = "contentAreaContextMenu";
w.addEle(status, 'display:table;font:14px Times New Roman;font-weight:bold;color:blue;width:auto;height:auto;padding-top:2px;margin:0 3px;cursor:pointer;');
w.addEventListener('mousedown', function(e) {
if (e.target == w) {
e.preventDefault();
var st = w.style;
var mouseMove = e => {
st.top = parseInt(st.top) + e.movementY + "px";
st.left = parseInt(st.left) + e.movementX + "px";
};
doc.addEventListener('mousemove', mouseMove, false);
doc.addEventListener('mouseup', function() { doc.removeEventListener('mousemove', mouseMove, false); }, false);
}
}, false);
doc.documentElement.appendChild(w);
if (size) {
cnt.style.height = size.height;
cnt.style.width = size.width;
} else {
for (var i = 3; i < 10; i++) {
if (cnt.scrollHeight > cnt.offsetHeight || cnt.scrollWidth > cnt.offsetWidth) {
cnt.style.height = 80 * i + 'px';
cnt.style.width = 160 * i + 'px';
} else break;
}
};
var docEle = (doc.compatMode == 'CSS1Compat' && win.postMessage) ? doc.documentElement : doc.body;
var mX = docEle.clientWidth - w.offsetWidth, mY = docEle.clientHeight - w.offsetHeight;
if (mX < 0) { cnt.style.width = parseInt(cnt.style.width) + mX + 'px'; mX = 0 };
if (mY < 0) { cnt.style.height = parseInt(cnt.style.height) + mY + 'px'; mY = 0 };
var hW = parseInt(w.offsetWidth / 2);
w.style.left = (pos && pos.X < mX + hW ? (pos.X > hW ? pos.X - hW : 0) : mX) + 'px';
w.style.top = (pos && pos.Y + 10 < mY ? pos.Y + 10 : mY) + 'px';
w.style.visibility = 'visible';
doc.addEventListener('keydown', keyDown, false);
return w;
};
var getHash = function(txt) {
var TKK = ((function() {
var a = 817046147;
var b = -335196159;
return 410049 + '.' + (a + b);
})());
function sM(a) {
var b;
if (null !== yr)
b = yr;
else {
b = wr(String.fromCharCode(84));
var c = wr(String.fromCharCode(75));
b = [b(), b()];
b[1] = c();
b = (yr = window[b.join(c())] || "") || "";
}
var d = wr(String.fromCharCode(116));
var c = wr(String.fromCharCode(107));
d = [d(), d()];
d[1] = c();
c = "&" + d.join("") + "=";
d = b.split(".");
b = Number(d[0]) || 0;
for (var e = [], f = 0, g = 0; g < a.length; g++) {
var l = a.charCodeAt(g);
128 > l ? e[f++] = l : (2048 > l ? e[f++] = l >> 6 | 192 : (55296 == (l & 64512) && g + 1 < a.length && 56320 == (a.charCodeAt(g + 1) & 64512) ? (l = 65536 + ((l & 1023) << 10) + (a.charCodeAt(++g) & 1023),
e[f++] = l >> 18 | 240,
e[f++] = l >> 12 & 63 | 128) : e[f++] = l >> 12 | 224,
e[f++] = l >> 6 & 63 | 128),
e[f++] = l & 63 | 128);
}
a = b;
for (f = 0; f < e.length; f++)
a += e[f],
a = xr(a, "+-a^+6");
a = xr(a, "+-3^+b+-f");
a ^= Number(d[1]) || 0;
0 > a && (a = (a & 2147483647) + 2147483648);
a %= 1E6;
return c + (a.toString() + "." + (a ^ b));
}
var yr = null;
var wr = function(a) {
return function() {
return a;
};
};
var xr = function(a, b) {
for (var c = 0; c < b.length - 2; c += 3) {
var d = b.charAt(c + 2);
d = "a" <= d ? d.charCodeAt(0) - 87 : Number(d);
d = "+" == b.charAt(c + 1) ? a >>> d : a << d;
a = "+" == b.charAt(c) ? a + d & 4294967295 : a ^ d;
}
return a;
};
return sM(txt);
};
var ujs_google_translat = function(dir) {
var lng = 'de';
var txt = gClipboard.read();
var l = dir.split('|');
var encTxt = encodeURIComponent(txt);
var winWait = function(lng) { createWindow('', (lng == 'de' ? 'Warten bis der Text übersetzt ist' : 'Wait, is going Translating') + '\u2026', 'Google Translate', '_gt', window.navigator.lastClick); };
if (txt) {
winWait(lng);
var xhr = new XMLHttpRequest();
var url = 'https://translate.google.com/translate_a/single?client=gtx&sl=' + l[0] + '&tl=' + l[1] + '&hl=' + lng + '&eotf=0&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t' + getHash(txt);
var urlt = "http://translate.google.com/translate_t?text=" + encTxt + "&sl=" + l[0] + "&tl=" + l[1] + "&hl=" + lng + "&eotf=0&ujs=gtt";
xhr.open('POST', url, true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=utf-8');
xhr.onreadystatechange = function() {
try {
if (xhr.readyState == 4 && xhr.status == 200) {
var result = '', status = '', tmp = JSON.parse(xhr.responseText.replace(/\[(?=,)/g, '[0').replace(/,(?=,|\])/g, ',0').replace(/\\n/g, "<br />"));
for (var i = 0, n; n = tmp[0][i]; i++) {
if (n[0]) result += n[0].toString();
};
status = tmp[8][0][0].toUpperCase() + ' -\u203A ' + l[1].toUpperCase();
createWindow(result, status, '<a href="' + urlt.replace(/&/g, '&') + '" target="_blank" style="display:inline;padding:0;margin:0;text-decoration:none;border:none;color:#009;font:22px Times New Roman;">Google Translate</a>', '_gt', window.navigator.lastClick);
}
} catch (x) { LOG(x); };
};
xhr.send('q=' + encodeURIComponent(txt));
};
};
var ujs_google_translate = function() {
var lng = 'de';
var txt = gContextMenu.selectionInfo.fullText;
var encTxt = encodeURIComponent(txt);
var winWait = function(lng) { createWindow('', (lng == 'de' ? 'Warten bis der Text übersetzt ist' : 'Wait, is going Translating') + '\u2026', 'Google Translate', '_gt', window.navigator.lastClick); };
if (txt) {
winWait(lng);
var xhr = new XMLHttpRequest();
var url = 'https://translate.google.com/translate_a/single?client=gtx&sl=' + langFrom_google_text + '&tl=' + langTo_google_text + '&hl=' + lng + '&eotf=0&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t' + getHash(txt);
var urlt = "http://translate.google.com/translate_t?text=" + encTxt + "&sl=" + langFrom_google_text + "&tl=" + langTo_google_text + "&hl=" + lng + "&eotf=0&ujs=gtt";
xhr.open('POST', url, true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=utf-8');
xhr.onreadystatechange = function() {
try {
if (xhr.readyState == 4 && xhr.status == 200) {
var result = '', status = '', tmp = JSON.parse(xhr.responseText.replace(/\[(?=,)/g, '[0').replace(/,(?=,|\])/g, ',0').replace(/\\n/g, "<br />"));
for (var i = 0, n; n = tmp[0][i]; i++) {
if (n[0]) result += n[0].toString();
};
status = tmp[8][0][0].toUpperCase() + ' -\u203A ' + langTo_google_text.toUpperCase();
createWindow(result, status, '<a href="' + urlt.replace(/&/g, '&') + '" target="_blank" style="display:inline;padding:0;margin:0;text-decoration:none;border:none;color:#009;font:22px Times New Roman;">Google Translate</a>', '_gt', window.navigator.lastClick);
}
} catch (x) { LOG(x); };
};
xhr.send('q=' + encodeURIComponent(txt));
};
};
(function() {
if (document.getElementById("TranslateBufer")) return;
var contextMenu = document.getElementById("contentAreaContextMenu");
var Item = document.createXULElement("menuitem");
Item.setAttribute("label", "Translate from clipboard");
Item.setAttribute("class", "menuitem-iconic");
Item.setAttribute("image", mainicon);
Item.addEventListener("command", function() { ujs_google_translat('auto|de'); }, false);
contextMenu.insertBefore(Item, document.getElementById("context-viewpartialsource-selection"));
addDestructor(function() { contextMenu.removeChild(Item); });
})();
(function() {
if (document.getElementById("TranslateSelected")) return;
var contextMenu = document.getElementById("contentAreaContextMenu");
var Item = document.createXULElement("menuitem");
Item.setAttribute("id", "TranslateSelected");
Item.setAttribute("label", "Translate selected text");
Item.setAttribute("class", "menuitem-iconic");
Item.setAttribute("image", mainicon);
Item.addEventListener("command", function() { ujs_google_translate(); }, false);
contextMenu.insertBefore(Item, document.getElementById("context-viewpartialsource-selection"));
addDestructor(function() { contextMenu.removeChild(Item); });
addEventListener("popupshowing", function() {
Item.hidden = !gContextMenu.isTextSelected;
}, false, contextMenu);
})();
};
// Initialize handlers array
this.handlers = [];
initFunction("cbinit-google-translate", "http://www.w3.org/1999/xhtml", () => {}, addEventListener, { read: readFromClipboard }, Cu.reportError);
window.addEventListener("unload", this, { once: true });
})();
Alles anzeigen
Bitte um Tests und natürlich um Rückmeldung(en).
Ja, tatsächlich, funktioniert mit den "Schalter"
Wenn es um das Skript von lenny2 aus Beitrag #13 geht, da muss der Schalter auf true gesetzt werden, denn in Zeile 156 wird die Funktion eval() verwendet. In Zeile 13 wird dann noch Function verwendet, das ebenfalls mit dem Wert false blockiert werden könnte.
Es werden grundsätzlich folgende Aufrufe blockiert:
Es werden grundsätzlich folgende Aufrufe blockiert:
- eval()
- new Function()
- setTimeout(string)
- setInterval(string)
Die ersten beiden, ja. Aber mit Sicherheit nicht setTimeout und setInterval.
Es werden grundsätzlich folgende Aufrufe blockiert:
- eval()
- new Function()
- setTimeout(string)
- setInterval(string)
Die ersten beiden, ja. Aber mit Sicherheit nicht setTimeout und setInterval.
Dann hat mich chaty belogen, die Sau!
So ist es, wenn man sich auf die KD verlässt, die künstliche Dummheit.
So ist es, wenn man sich auf die KD verlässt, die künstliche Dummheit.
Blödsinn. Dank KI gibt es nun eine verbesserte Version des Skripts!
Ok, überprüfen hätte ich die Antwort von "chaty" schon sollen.
Es war dann mein Fehler, nicht der, der KI.
Wobei ich schon das Gefühl habe, dass "die Französin" besser ist.
Hast Du das "neue" Skript mal getestet?
lenny2 A new version of your script, without security.allow_unsafe_dangerous_privileged_evil_eval set to true!
Blödsinn. Dank KI
Blödsinn ist das nicht, weil es einfach eine Tatsache ist, dass KI-Bots über kein echtes Wissen verfügen und sich viele Dinge schlicht und ergreifend ausdenken. Es werden ganz einfach nur gefundene Informationen mit einer mathematischen Wahrscheinlichkeit zusammengesetzt. Das ist keine tatsächliche Intelligenz. Eine derartige Falschinformation, für die es auch keine einzige Quelle gibt, die das stützt, ist - leider - ein zu erwartendes Ergebnis und absolut keine Überraschung, wenn man eine KI zu so einem Thema befragt.
Es war dann mein Fehler, nicht der, der KI.
Selbstverständlich muss der Mensch das Ergebnis prüfen, aber den Fehler hat dennoch die KI gemacht, wenn sie das behauptet hat, was du wiedergegeben hast. Da braucht der Mensch die Maschine nicht in Schutz zu nehmen.
Mh, ok, stimmt schon, dennoch hätte ich es überprüfen müssen (sollen).
lenny2 A new version of your script, without security.allow_unsafe_dangerous_privileged_evil_eval set to true!
v139.0b4. Die deutsch-französische Team hat gute Arbeit geleistet
Endor Kannst Du das Skript in Deine Sammlung aufnehmen?
Einen gescheiten header muss ich mir noch einfallen lassen,
oder hast Du eine Idee?
// google-context-translate.uc.js (any > de)
location.href.endsWith("://browser/content/browser.xhtml") && (async () => {
await delayedStartupPromise;
var addEventListener = (...args) => {
var trg = args[3];
if (!trg) trg = args[3] = window;
trg.addEventListener(...args);
this.handlers.push(args);
};
var initFunction = async function(_id, xhtmlns, addDestructor, addEventListener, gClipboard, LOG) {
// Hier ist der Code, der ursprünglich als String in new Function() übergeben wurde
var langFrom_google_text = "auto"; //auto
var langTo_google_text = "de";
// Assign icons
var mainicon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADKElEQVR42p2TX2hTdxTHPzfJTW6T3qQmapvWabUbog+udp3kYeLQ4f6wiZQNtjlXHyZaBYe6TekYVGRQYexFscOtuD7UdWxzMtAXEbZStKIbDsaUCbVj9o8mTW+aNrlJbu5vJ8Ex2OMO/Lj87jnne873nO9PSyTV3tkAfYi5NhQ1MB1Ijc3ijN+D7CQh28YK+GHDMyxpjlJTkmAdQi5dWvOsUrYkGB5QC5Kcg/aFBxxqqycmcY38a/1yTqYgMw8ByfFKjtZ4V6myCeW8IApyfOw2155fw1DG4dOJJK1r45x5BPDUpZuMr2uXSuAvgBMQgOitjLJNn7iDSJP0rIJ35dt19TeGoi0Es1MMP72KFvm3+88phuYM3HCd3ObQizpa/cW7Kh020E0Tz1yOUxvjdIr7o6t/cLpkEJqZp7s5zN62ZewfnWLQ9VIIBqodBdI5tIbBG8oKhSAaJZDN8tpSP5+3L8eVgLbeAdKal7NH3mKL3FcOXCfV1ITjc7FLFrWZIlpt/4+qEA7hLRrCwk/RusOXu7ax8xHvGTkVgi/89As/T8ia9EUyghKOWSaYyqNx8oIiuEgcshetsooceibJinvTfNH1DpseD3LHSZE4eprs6k24NQaevI1fF8q5FJqv9xvlmFLdkKZlhb77E8TdIlFD54OOl3mzdXm1k+sP0jzbdwF7cRhsj8ysAWYnpYPeQfXPnn3JJG8/sZT+PW8gkuDbkWEiRh3b29dV/edujNE5dB4nHJSCUrQsTdP9mUKrCKHA5piHK+918quVp/VoD9W9uhGejNRx6+N9VZAmoTJZmhbK4vR7BGDPCQEQ/qU8R15aT2/Hi/R8PcyxyyMyVBmaXwIfPiTVf5yYHiF28ARpOyuqk3nJ4DV2HFc4SamUZ3vrGr7vPlitFNraQc4SzZZt6ptWMv3DAOdGrrGj7yvR+2KYr5A0BeCVAwqvBQuyMG+MTzp3cvj15/ivfXfzNq++/yFEIlD7GFjZ6uPRaE4oGuNQI68jIINJu0QbTFoadIJlL7lSgb8sxbSVEb8geUUVtkh55r50MY5Wec6jibV9/A9LjP7e9TdFQScjW9P1XAAAAABJRU5ErkJggg==";
function GetXmlHttpObject() {
if (window.XMLHttpRequest) { return new XMLHttpRequest(); }
if (window.ActiveXObject) { return new ActiveXObject("Microsoft.XMLHTTP"); }
return null;
}
var lc = navigator.lastClick = {};
addEventListener("mouseup", e => {
if (e.button) return;
lc.X = e.screenX - mozInnerScreenX;
lc.Y = e.screenY - mozInnerScreenY;
}, false, gBrowser.tabpanels || 1);
var createWindow = function(text, status, title, id, pos, size) {
var win = window, doc = win.document, wId = 'ujs_window' + (id || ''), w = doc.getElementById(wId);
var keyDown = function(e) {
if (!e.shiftKey && !e.ctrlKey && !e.altKey && e.keyCode == 27) doc.getElementById(wId).closeWin();
};
if (w) w.closeWin();
gBrowser.addEventListener("click", function c() {
this.removeEventListener("click", c);
try { doc.getElementById(wId).closeWin(); } catch (e) {};
}, true);
w = doc.createElementNS(xhtmlns, 'div');
w.setAttribute('style', 'position:fixed;display:block;visibility:hidden;left:0;top:0;width:auto;height:auto;border:1px solid gray;padding:2px;margin:0;z-index:99999;overflow:hidden;cursor:move;' + (typeof w.style.borderRadius === 'string' ? 'background-color:#eaeaea;padding-top:0px;border-radius:4px;box-shadow:0 0 15px rgba(0,0,0,.4);' : 'background:-o-skin("Window Skin");'));
w.id = wId;
w.closeWin = function() {
doc.removeEventListener('keydown', keyDown, false);
this.parentNode.removeChild(this);
};
w.addEle = function(str, style) {
var ele = doc.createElementNS(xhtmlns, 'div');
ele.setAttribute('style', style);
if (str) {
ele.innerHTML = str;
for (var el, all = ele.getElementsByTagName('*'), i = all.length; i--;) {
el = all[i];
if (/^(script|frame|iframe|applet|embed|object)$/i.test(el.nodeName)) {
el.parentNode.removeChild(el);
} else {
for (var att = el.attributes, j = att.length; j--;) {
if (/^on[a-z]+$/i.test(att[j].name)) att[j].value = '';
}
}
}
}
return this.appendChild(ele);
};
w.addEle1 = function(str, style) {
var ele = doc.createElementNS(xhtmlns, 'textarea');
ele.setAttribute('style', style);
if (str) {
ele.innerHTML = str;
for (var el, all = ele.getElementsByTagName('*'), i = all.length; i--;) {
el = all[i];
if (/^(script|frame|iframe|applet|embed|object)$/i.test(el.nodeName)) {
el.parentNode.removeChild(el);
} else {
for (var att = el.attributes, j = att.length; j--;) {
if (/^on[a-z]+$/i.test(att[j].name)) att[j].value = '';
}
}
}
}
return this.appendChild(ele);
};
var img = doc.createElementNS(xhtmlns, 'div');
img.setAttribute('style', 'display:block;float:right;width:22px;height:22px;padding:0;margin-top:2px;margin-right:1px;border:none;cursor:pointer;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAIAAABL1vtsAAAACXBIWXMAAArEAAAKxAFmbYLUAAABc0lEQVQ4y2P84mzGQBlgYaAYoBjBrKn79/plgnrQlCGM4Jwwj0lC6kdjKX5TmDV1Oeq7/7149r0gCcUIZk1dJgkpBgYGjvruXyvm/96wErt+fWOOylYGBgYmCSm4WxjhwQkxHsL+vW39r0Uz0f3s6M6eVsDAyMjAwIDsWEbkGGHW1OWoaGFgZ8c0BaH///8fHbV/L56BSzGiRSqztj5HWROaKcj6f86e+GffDmQtjJjpAs2Uf48f4NGP3Qg0U6AAh36cRkBNqWhmYGWDcH/OmoBVP77UySgmwcDCCucyyciTlsCRw4/hz28GVjZWr0AGBgbMmMZuBFr4/3/5nKOskYGdA5cp6GGBNf6YtfUhpmBNdShGsFjas+dVYI0/ZFN+zZ/2e+cmLEYgEjiO+MNlCtQI5Azyc1L7n2MHsQYzk4o6Z8tECBtuCjQ4/16//O/FM4KZ/d+dm99r8jlbJv69eRXdFSQVOUwq6v/u3CScOuladgIAhMrZgyTDTBwAAAAASUVORK5CYII=");background:-o-skin("Caption Close Button Skin");');
img.title = (win.navigator.language.indexOf('de') == 0) ? '\u0417\u0430\u043A\u0440\u044B\u0442\u044C' : 'Close';
img.addEventListener('click', function() { this.parentNode.closeWin(); }, false);
w.appendChild(img);
var title = w.addEle(title, 'display:table;color:#000;font:17px Times New Roman;width:auto;height:auto;padding:0;margin:0 2px;cursor:text;');
title.onclick = e => {
e.preventDefault();
var url = e.target.href;
var ctabpos = gBrowser.selectedTab._tPos + 1;
gBrowser.moveTabTo(gBrowser.selectedTab = gBrowser.addWebTab(url), ctabpos);
doc.getElementById(wId).closeWin();
};
var cnt = w.addEle1(text, 'display:block;border:1px solid #aaa;padding-bottom:3px;padding-left:3px;background-color:#f2ffe6;color:#8c0023;font:24px Times New Roman;width:600px;height:200px;overflow:auto;cursor:text;-moz-user-focus:normal;-moz-user-select:text;');
cnt.contentEditable = "true";
cnt.context = "contentAreaContextMenu";
w.addEle(status, 'display:table;font:14px Times New Roman;font-weight:bold;color:blue;width:auto;height:auto;padding-top:2px;margin:0 3px;cursor:pointer;');
w.addEventListener('mousedown', function(e) {
if (e.target == w) {
e.preventDefault();
var st = w.style;
var mouseMove = e => {
st.top = parseInt(st.top) + e.movementY + "px";
st.left = parseInt(st.left) + e.movementX + "px";
};
doc.addEventListener('mousemove', mouseMove, false);
doc.addEventListener('mouseup', function() { doc.removeEventListener('mousemove', mouseMove, false); }, false);
}
}, false);
doc.documentElement.appendChild(w);
if (size) {
cnt.style.height = size.height;
cnt.style.width = size.width;
} else {
for (var i = 3; i < 10; i++) {
if (cnt.scrollHeight > cnt.offsetHeight || cnt.scrollWidth > cnt.offsetWidth) {
cnt.style.height = 80 * i + 'px';
cnt.style.width = 160 * i + 'px';
} else break;
}
};
var docEle = (doc.compatMode == 'CSS1Compat' && win.postMessage) ? doc.documentElement : doc.body;
var mX = docEle.clientWidth - w.offsetWidth, mY = docEle.clientHeight - w.offsetHeight;
if (mX < 0) { cnt.style.width = parseInt(cnt.style.width) + mX + 'px'; mX = 0 };
if (mY < 0) { cnt.style.height = parseInt(cnt.style.height) + mY + 'px'; mY = 0 };
var hW = parseInt(w.offsetWidth / 2);
w.style.left = (pos && pos.X < mX + hW ? (pos.X > hW ? pos.X - hW : 0) : mX) + 'px';
w.style.top = (pos && pos.Y + 10 < mY ? pos.Y + 10 : mY) + 'px';
w.style.visibility = 'visible';
doc.addEventListener('keydown', keyDown, false);
return w;
};
var getHash = function(txt) {
var TKK = ((function() {
var a = 817046147;
var b = -335196159;
return 410049 + '.' + (a + b);
})());
function sM(a) {
var b;
if (null !== yr)
b = yr;
else {
b = wr(String.fromCharCode(84));
var c = wr(String.fromCharCode(75));
b = [b(), b()];
b[1] = c();
b = (yr = window[b.join(c())] || "") || "";
}
var d = wr(String.fromCharCode(116));
var c = wr(String.fromCharCode(107));
d = [d(), d()];
d[1] = c();
c = "&" + d.join("") + "=";
d = b.split(".");
b = Number(d[0]) || 0;
for (var e = [], f = 0, g = 0; g < a.length; g++) {
var l = a.charCodeAt(g);
128 > l ? e[f++] = l : (2048 > l ? e[f++] = l >> 6 | 192 : (55296 == (l & 64512) && g + 1 < a.length && 56320 == (a.charCodeAt(g + 1) & 64512) ? (l = 65536 + ((l & 1023) << 10) + (a.charCodeAt(++g) & 1023),
e[f++] = l >> 18 | 240,
e[f++] = l >> 12 & 63 | 128) : e[f++] = l >> 12 | 224,
e[f++] = l >> 6 & 63 | 128),
e[f++] = l & 63 | 128);
}
a = b;
for (f = 0; f < e.length; f++)
a += e[f],
a = xr(a, "+-a^+6");
a = xr(a, "+-3^+b+-f");
a ^= Number(d[1]) || 0;
0 > a && (a = (a & 2147483647) + 2147483648);
a %= 1E6;
return c + (a.toString() + "." + (a ^ b));
}
var yr = null;
var wr = function(a) {
return function() {
return a;
};
};
var xr = function(a, b) {
for (var c = 0; c < b.length - 2; c += 3) {
var d = b.charAt(c + 2);
d = "a" <= d ? d.charCodeAt(0) - 87 : Number(d);
d = "+" == b.charAt(c + 1) ? a >>> d : a << d;
a = "+" == b.charAt(c) ? a + d & 4294967295 : a ^ d;
}
return a;
};
return sM(txt);
};
var ujs_google_translat = function(dir) {
var lng = 'de';
var txt = gClipboard.read();
var l = dir.split('|');
var encTxt = encodeURIComponent(txt);
var winWait = function(lng) { createWindow('', (lng == 'de' ? 'Warten bis der Text übersetzt ist' : 'Wait, is going Translating') + '\u2026', 'Google Translate', '_gt', window.navigator.lastClick); };
if (txt) {
winWait(lng);
var xhr = new XMLHttpRequest();
var url = 'https://translate.google.com/translate_a/single?client=gtx&sl=' + l[0] + '&tl=' + l[1] + '&hl=' + lng + '&eotf=0&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t' + getHash(txt);
var urlt = "http://translate.google.com/translate_t?text=" + encTxt + "&sl=" + l[0] + "&tl=" + l[1] + "&hl=" + lng + "&eotf=0&ujs=gtt";
xhr.open('POST', url, true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=utf-8');
xhr.onreadystatechange = function() {
try {
if (xhr.readyState == 4 && xhr.status == 200) {
var result = '', status = '', tmp = JSON.parse(xhr.responseText.replace(/\[(?=,)/g, '[0').replace(/,(?=,|\])/g, ',0').replace(/\\n/g, "<br />"));
for (var i = 0, n; n = tmp[0][i]; i++) {
if (n[0]) result += n[0].toString();
};
status = tmp[8][0][0].toUpperCase() + ' -\u203A ' + l[1].toUpperCase();
createWindow(result, status, '<a href="' + urlt.replace(/&/g, '&') + '" target="_blank" style="display:inline;padding:0;margin:0;text-decoration:none;border:none;color:#009;font:22px Times New Roman;">Google Translate</a>', '_gt', window.navigator.lastClick);
}
} catch (x) { LOG(x); };
};
xhr.send('q=' + encodeURIComponent(txt));
};
};
var ujs_google_translate = function() {
var lng = 'de';
var txt = gContextMenu.selectionInfo.fullText;
var encTxt = encodeURIComponent(txt);
var winWait = function(lng) { createWindow('', (lng == 'de' ? 'Warten bis der Text übersetzt ist' : 'Wait, is going Translating') + '\u2026', 'Google Translate', '_gt', window.navigator.lastClick); };
if (txt) {
winWait(lng);
var xhr = new XMLHttpRequest();
var url = 'https://translate.google.com/translate_a/single?client=gtx&sl=' + langFrom_google_text + '&tl=' + langTo_google_text + '&hl=' + lng + '&eotf=0&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t' + getHash(txt);
var urlt = "http://translate.google.com/translate_t?text=" + encTxt + "&sl=" + langFrom_google_text + "&tl=" + langTo_google_text + "&hl=" + lng + "&eotf=0&ujs=gtt";
xhr.open('POST', url, true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=utf-8');
xhr.onreadystatechange = function() {
try {
if (xhr.readyState == 4 && xhr.status == 200) {
var result = '', status = '', tmp = JSON.parse(xhr.responseText.replace(/\[(?=,)/g, '[0').replace(/,(?=,|\])/g, ',0').replace(/\\n/g, "<br />"));
for (var i = 0, n; n = tmp[0][i]; i++) {
if (n[0]) result += n[0].toString();
};
status = tmp[8][0][0].toUpperCase() + ' -\u203A ' + langTo_google_text.toUpperCase();
createWindow(result, status, '<a href="' + urlt.replace(/&/g, '&') + '" target="_blank" style="display:inline;padding:0;margin:0;text-decoration:none;border:none;color:#009;font:22px Times New Roman;">Google Translate</a>', '_gt', window.navigator.lastClick);
}
} catch (x) { LOG(x); };
};
xhr.send('q=' + encodeURIComponent(txt));
};
};
(function() {
if (document.getElementById("TranslateBufer")) return;
var contextMenu = document.getElementById("contentAreaContextMenu");
var Item = document.createXULElement("menuitem");
Item.setAttribute("label", "Translate from clipboard");
Item.setAttribute("class", "menuitem-iconic");
Item.setAttribute("image", mainicon);
Item.addEventListener("command", function() { ujs_google_translat('auto|de'); }, false);
contextMenu.insertBefore(Item, document.getElementById("context-viewpartialsource-selection"));
addDestructor(function() { contextMenu.removeChild(Item); });
})();
(function() {
if (document.getElementById("TranslateSelected")) return;
var contextMenu = document.getElementById("contentAreaContextMenu");
var Item = document.createXULElement("menuitem");
Item.setAttribute("id", "TranslateSelected");
Item.setAttribute("label", "Translate selected text");
Item.setAttribute("class", "menuitem-iconic");
Item.setAttribute("image", mainicon);
Item.addEventListener("command", function() { ujs_google_translate(); }, false);
contextMenu.insertBefore(Item, document.getElementById("context-viewpartialsource-selection"));
addDestructor(function() { contextMenu.removeChild(Item); });
addEventListener("popupshowing", function() {
Item.hidden = !gContextMenu.isTextSelected;
}, false, contextMenu);
})();
};
// Initialize handlers array
this.handlers = [];
initFunction("cbinit-google-translate", "http://www.w3.org/1999/xhtml", () => {}, addEventListener, { read: readFromClipboard }, Cu.reportError);
window.addEventListener("unload", this, { once: true });
})();
Alles anzeigen
Bei dir stand etwas von Weiterleitungen.
ja, weil es teils auch Weiterleitungen blockiert auf andere Seiten siehe Beispiel 2 und 3 in diesem Post.
Ja, eben. Beachte das Schlüsselwort refresh in der Meta-Anweisung. Diese besagt „Lade die Seite neu mit der angegebenen URL“, man kann aber auch dieselbe Adresse neu laden lassen (war vielleicht sogar der ursprüngliche Anwendungsfall, weiß ich aber nicht).
Und: Das Skript funktioniert, wie gepostet, mit deinen beiden Beispielseiten, aber nicht mit Beispiel 1 (was auch nicht anders zu erwarten war). Ich es oben (oder: am Ende der ersten Seite) übrigens leicht geändert: Die Tooltips sind jetzt ebenso wie das CSS als Template Literale (Vorlagen-Strings) eingetragen (Link zu MDN).
Endor Kannst Du das Skript in Deine Sammlung aufnehmen?
Einen gescheiten header muss ich mir noch einfallen lassen,
oder hast Du eine Idee?
Vielleicht context-translate-enhanced.uc.js? (Ping Endor.) Die bisherige Variante ist aber wohl nicht bei Endor zu finden - oder besser: die zwei Varianten für Google und DeepL.
Endor Kannst Du das Skript in Deine Sammlung aufnehmen?
Einen gescheiten header muss ich mir noch einfallen lassen,
oder hast Du eine Idee?Vielleicht context-translate-enhanced.uc.js? (Ping Endor.) Die bisherige Variante ist aber wohl nicht bei Endor zu finden - oder besser: die zwei Varianten für Google und DeepL.
Beim header dachte ich eher in so etwas wie:
// ==UserScript==
// @name context-translate-enhanced.uc.js
// @charset UTF-8
// @author @mira
// @version v2025.05.06
// Source https://www.camp-firefox.de/forum/thema/139300/?postID=1271397#post1271397
Und die andere beiden Skripte sind ebenfalls nicht bei Endor !
// Translate_DeepL.uc.js
// https://github.com/ardiman/userChrome.js/tree/master/contexttranslate
// ex ContextTranslate.uc.js///
// modifiziert by universum 123, Umlaute geändert by 2002Andreas
// https://www.camp-firefox.de/forum/thema/126100/?postID=1107070#post1107070
(function () {
if (location.href !== 'chrome://browser/content/browser.xhtml') return;
let translate = function () {
let browserMM = gBrowser.selectedBrowser.messageManager;
browserMM.addMessageListener('getSelection', function listener(message) {
let t = (message.data !== '');
let e = (document.charset || document.characterSet);
if (t) {
openWebLinkIn('https://www.deepl.com/translator#en/de/' + encodeURIComponent(message.data), 'tab');
} else {
openWebLinkIn('https://www.deepl.com/translate?u=' + encodeURIComponent(gBrowser.currentURI.spec) + '&hl=de-DE&ie=' + e + '&sl=auto&tl=de-DE', 'tab');
};
browserMM.removeMessageListener('getSelection', listener, true);
});
browserMM.loadFrameScript('data:,sendAsyncMessage("getSelection", content.document.getSelection().toString())', true);
}
let menuitem = document.createXULElement('menuitem');
menuitem.id = 'context-DeepLtranslate';
menuitem.setAttribute('label', '\u00dcbersetzen (DeepL)');
menuitem.classList.add('menuitem-iconic');
let ProfilePath = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
let IconPath = '/chrome/icons/'; // Pfad in den entsprechenden Unterordner
let ButtonIcon = "DeepL_2.png"; // Name & Dateiendung des anzuzeigenden Symbols!
menuitem.style.listStyleImage = 'url("' + ("file:" + ProfilePath + IconPath + ButtonIcon) + '")';
menuitem.addEventListener('command', translate);
let refItem = document.getElementById('context-inspect');
refItem.parentNode.insertBefore(menuitem, refItem);
})();
Alles anzeigen
// ContextTranslate_Google.uc.js
// https://github.com/ardiman/userChrome.js/tree/master/contexttranslate
// ex ContextTranslate.uc.js///
// modifiziert by universum 123, Umlaute geändert by 2002Andreas
// https://www.camp-firefox.de/forum/thema/126100/?postID=1107070#post1107070
(function () {
if (location != 'chrome://browser/content/browser.xhtml')
return;
let translate = function () {
let browserMM = gBrowser.selectedBrowser.messageManager;
browserMM.addMessageListener('getSelection', function listener(message) {
let t = (message.data !== '');
let e = (document.charset || document.characterSet);
if (t) {
openWebLinkIn('https://translate.google.com/?sl=en&tl=de&text=' + encodeURIComponent(message.data), 'tab');
} else {
openWebLinkIn('https://translate.google.com/translate?u=' + encodeURIComponent(gBrowser.currentURI.spec) + '&hl=de-DE&ie=' + e + '&sl=auto&tl=de-DE', 'tab');
};
browserMM.removeMessageListener('getSelection', listener, true);
});
browserMM.loadFrameScript('data:,sendAsyncMessage("getSelection", content.document.getSelection().toString())', true);
}
let menuitem = document.createXULElement('menuitem');
menuitem.id = 'context-googletranslate';
menuitem.setAttribute('label', '\u00dcbersetzen (Google)');
menuitem.classList.add('menuitem-iconic');
let ProfilePath = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
let ButtonIcon = "Google.svg";
menuitem.style.listStyleImage = 'url("' + ("file:" + ProfilePath + "/chrome/icons/" + ButtonIcon) + '")';
menuitem.addEventListener('command', translate);
let refItem = document.getElementById('context-inspect');
refItem.parentNode.insertBefore(menuitem, refItem);
})();
Alles anzeigen
Speravir und Mira_Belle .
Habe alle drei Scripte hoch geladen.
Bitte kontrollieren:
Mfg.
Endor
Bitte kontrollieren:
Hallo Endor.
Nur mal so, aber hier fehlt dann z.B. das Icon:
Entweder müsste eins von Mozilla enthalten sein als Platzhalter, oder du müsstest das/ein Icon zusätzlich hochladen