anwendungen_und_sonstiges:greasemonkey_-_blizzard-forumbeitrag_zu_zwischenablage
Inhaltsverzeichnis
Greasemonkey - Blizzard-Forumsbeitrag zu Zwischenablage
Fertig
Wohin mit dem transferierten Text?
Das ganze ist komplizierter als ich dachte - die Funktion läuft zwar und konvertiert auch den Eingabestring (den eigentlichen Post), allerdings lädt sich dieser Teil der Seite danach nicht neu.
Es gibt nun zwei Möglichkeiten, wie man mit dem ganzen umgehen kann:
- Mithilfe von Ajax das Neuladen des Elements im Browser triggern
- Das ganze nur als Prompt-Box annehmen, mit allen dazugehörigen Nachteilen :(
Update: Es gibt noch eine weitere Möglichkeit, nämlich indem einfach ein neues Fenster geöffnet wird - dort lässt sich nun der neue Text einfach einfügen. Dort kann man dann mit Strg+A, Strg+C den Quelltext einfach kopieren.
ToDo
- Quellenangabe
- Titelzeile
- Das Fenster hört nicht auf zu laden. Möglicherweise braucht das Ding ein sauberes HTML-Gerüst
Sourcecode
// ==UserScript== // @name get blizzard-forum entry to clipboard // @namespace rldml // @include /^https?://eu\.battle\.net/d3/(de|en)/forum/.*$/ // @version 1 // @grant none // ==/UserScript== var varDebug = true; var varSinglePost; var ATag var varStringToCopy = "Test"; var varPostList = document.getElementById('post-list'); if (varDebug == true) console.log ('GetElementByID: varPostList = ' + varPostList); for (i=0; i<varPostList.children.length; i++) { varSinglePost = varPostList.children[i]; if (varDebug == true) console.log('Select Post No. ' + i + ' with Id ' + varSinglePost.getAttribute('data-post-id') + ': ' + varSinglePost); varStringToCopy = varSinglePost.children[1].children[1].children[0].innerHTML; varStringToCopy = varStringToCopy.replace(/'/g, "\\'"); varATag = document.createElement('a'); varATag.setAttribute('href','javascript:copyToClipboard(\''+varStringToCopy+'\');'); varATag.setAttribute('id','GM' + varSinglePost.getAttribute('data-post-id')); varATag.innerHTML = "COPY"; varSinglePost.children[1].children[2].children[0].appendChild(varATag); } varScript = document.createElement('script'); varScript.setAttribute('type','text/javascript'); varScript.innerHTML = "function copyToClipboard(text) {Clipboard = window.open(); Clipboard.document.write(convertText2(text));}"; varPostList.appendChild(varScript); varScript = document.createElement('script'); varScript.setAttribute('type','text/javascript'); varScript.innerHTML = "function quotestr(quoteLevel) {\n\tqstr = \"\";\tfor (j = 1; j <= quoteLevel; j++) {\n\t\tqstr += \">\";\n\t}\n\treturn (qstr);\n}"; varPostList.appendChild(varScript); varScript = document.createElement('script'); varScript.setAttribute('type','text/javascript'); varScript.innerHTML = "function convertText2(varText)\r\n{\r\n var Text = [];\r\n var RestText = varText;\r\n do {\r\n FoundSomething = false;\r\n positionTag = -1;\r\n positionTag = RestText.indexOf(\"<\");\r\n if (positionTag != -1) {\r\n FoundSomething = true;\r\n if (positionTag == 0)\r\n {\r\n positionTagEnd = -1;\r\n positionTagEnd = RestText.indexOf(\">\") + 1;\r\n Text.push(RestText.substring(0, positionTagEnd));\r\n RestText = RestText.substring(positionTagEnd);\r\n } else\r\n {\r\n positionTagEnd = -1;\r\n positionTagEnd = RestText.indexOf(\"<\");\r\n Text.push(RestText.substring(0, positionTagEnd));\r\n RestText = RestText.substring(positionTagEnd);\r\n }\r\n } else {\r\n Text.push(RestText);\r\n RestText = \"\";\r\n }\r\n } while (FoundSomething == true && RestText.length > 0);\r\n var actQBLevel = 0;\r\n var ignoreBecauseSpan = false;\r\n var varText = \"\";\r\n for (i = 0; i < Text.length ; i++)\r\n {\r\n if (Text[i].indexOf(\"<blockquote\") != -1)\r\n {\r\n actQBLevel++;\r\n continue;\r\n }\r\n if (Text[i].indexOf(\"<\/blockquote\") != -1)\r\n {\r\n actQBLevel--;\r\n continue;\r\n }\r\n if (Text[i].indexOf(\"<div\") != -1)\r\n {\r\n varText += \"<br>\" + quotestr(actQBLevel);\r\n continue;\r\n }\r\n if (Text[i].indexOf(\"<\/div\") != -1)\r\n {\r\n varText += \"<br>\" + quotestr(actQBLevel);\r\n continue;\r\n }\r\n if (Text[i].indexOf(\"<b>\") != -1 || Text[i].indexOf(\"<\/b>\") != -1)\r\n {\r\n varText += \"**\";\r\n continue;\r\n }\r\n if (Text[i].indexOf(\"<span\") != -1)\r\n {\r\n varText += \"\/\/\";\r\n continue;\r\n }\r\n if (Text[i].indexOf(\"<\/span\") != -1)\r\n {\r\n varText += \"\/\/ \";\r\n continue;\r\n }\r\n if (Text[i].indexOf(\"<a\") != -1)\r\n {\r\n varText += \"[[\";\r\n hrefPos = Text[i].indexOf(\"href=\\\"\");\r\n hrefPostStart = hrefPos + 6;\r\n hrefPostEnd = (Text[i].indexOf(\"\\\"\", hrefPostStart));\r\n urlRef = Text[i].substring(hrefPostStart, hrefPostEnd);\r\n baseURL = location.href;\r\n baseURLTopic = (baseURL.lastIndexOf(\"\/\")) + 1;\r\n baseURL = baseURL.substring(0, baseURLTopic);\r\n varText += baseURL + urlRef + \"|\";\r\n continue;\r\n }\r\n if (Text[i].indexOf(\"<\/a\") != -1)\r\n {\r\n varText += \"]]\";\r\n continue;\r\n }\r\n if (Text[i].indexOf(\"<br\") != -1)\r\n {\r\n varText += \"<br>\" + quotestr(actQBLevel);\r\n continue;\r\n }\r\n if (varText == \"\")\r\n {\r\n varText += quotestr(actQBLevel) + Text[i];\r\n } else\r\n {\r\n varText += Text[i];\r\n }\r\n }\r\n return (varText);\r\n}"; varPostList.appendChild(varScript);
Interessante Infos
Neues Fenster in Javascript öffnen
Vielleicht hilft dieser Code-Schnipsel weiter:
function FensterOeffnen (Adresse) { MeinFenster = window.open(Adresse, "Zweitfenster", "width=300,height=400,left=100,top=200"); MeinFenster.document.write("<p>ein neues Fenster!<br>(Besser wäre aber eine dialog-Box!)</p>"); MeinFenster.focus(); }
Quelle: Link
Alle Single-Quotes in einem String Escapen
varStringToCopy = varStringToCopy.replace(/'/g, "\\'");
Quelle: [[http://stackoverflow.com/questions/15087497/escaping-single-quotes-in-javascript-string-for-javascript-evaluation|Link]
anwendungen_und_sonstiges/greasemonkey_-_blizzard-forumbeitrag_zu_zwischenablage.txt · Zuletzt geändert: 2016/04/02 00:48 von 127.0.0.1