Вроде получалось
Опять в одну строчку стала на 71.0
Возможно подкорректировать?
if (this.type != "menu") { this.type = "menu"; if (!this.hasAttribute("is")) return; } (popup => { var columns = [ "¤ ¦ § © « » ¬ ® ° ± µ ¶ — ‘ ’ “ ” • ‰ ‹ › ™", "… ≈ ≠ × ✓ ✗ ⊞ ⊞ ⊞ ⊞ ⊞ ⊞ ⊞ ⊞ ⊞ ⊞ ⊞", "\uD83E\uDD8A \uD83D\uDE0E ⊞ ⊞ ⊞ ⊞ ⊞ ⊞ ⊞" ]; var css = //0&& ` #${_id} menuitem > .menu-text { font-size: 22px; font-family: Consolas, Rockwell, Verdana; text-align: center; -moz-appearance: none; margin: 0; padding: 0 14px; } #${_id} menuitem > :not(.menu-text) { display: none; } #${_id} > menupopup > arrowscrollbox { background-color: menu; } `.replace(/;/g, " !important;"); var inserter = { get docShell() { delete this.docShell; return this.docShell = "docShell" in document && document.docShell instanceof Ci.nsIDocShell ? document.docShell : window.docShell; }, get insertText() { delete this.insertText; return this.insertText = text => { if (!this.docShell.isCommandEnabled("cmd_insertText")) return; var params = "createCommandParams" in Components.utils ? Cu.createCommandParams() : Components.classes["@mozilla.org/embedcomp/command-params;1"] .createInstance(Components.interfaces.nsICommandParams); params.setStringValue("state_data", text); this.docShell.doCommandWithParams("cmd_insertText", params); } }, insert(text) { var br = document.activeElement; !br || br.localName != "browser" || !br.isRemoteBrowser ? this.insertText(text) : br.messageManager.loadFrameScript( `data:,(${this.insertText})${encodeURIComponent(text.toSource())}` , false, true); } }; this.onmousedown = e => { if (e.button) return; popup.addEventListener("popupshowing", e => { var menugroup = popup.firstChild; var parent = "boxObject" in menugroup ? menugroup.boxObject.parentBox : menugroup.flattenedTreeParentNode; parent.setAttribute("orient", "horizontal"); if (parent.localName == "scrollbox") parent.style.setProperty("-moz-box-orient", "horizontal", "important"); }, {once: true}); popup.setAttribute("context", ""); popup.setAttribute("oncommand", "inserter.insert(event.target.label);"); popup.onauxclick = e => { var sym = e.target.label; sym && inserter.insert(sym); } popup.inserter = inserter; var df = document.createDocumentFragment(); for(var symbols of columns) { var menugroup = popup.appendChild(document.createElementNS(xulns, "menugroup")); menugroup.setAttribute("orient", "vertical"); for(var sym of symbols.split(" ")) menugroup.appendChild( document.createElementNS(xulns, "menuitem") ).setAttribute("label", sym); } popup.append(df); this.onmousedown = null; if (!css) return; var dwu = "windowUtils" in window && windowUtils instanceof Ci.nsIDOMWindowUtils ? windowUtils : window.QueryInterface(Ci.nsIInterfaceRequestor) .getInterface(Ci.nsIDOMWindowUtils); var type = dwu.AGENT_SHEET; var url = "data:text/css," + encodeURIComponent(css); dwu.loadSheetUsingURIString(url, type); addDestructor(() => dwu.removeSheetUsingURIString(url, type)); } this.prepend(popup); })(document.createElementNS(xulns, "menupopup"));
Отсутствует
Возможно подкорректировать?
Вроде нашлась какая-то.
Подзабил на неё уже, это правда.
(this.type != "menu" && (this.type = "menu") && !this.hasAttribute("is")) || (popup => { var columns = [ "¤ ¦ § © « » ¬ ® ° ± µ ¶ — ‘ ’ “ ” • ‰ ‹ › ™", "… ≈ ≠ × ✓ ✗ ⊞ ⊞ ⊞ ⊞ ⊞ ⊞ ⊞ ⊞ ⊞ ⊞ ⊞", "\uD83E\uDD8A \uD83D\uDE0E ⊞ ⊞ ⊞ ⊞ ⊞ ⊞ ⊞" ]; var css = //0&& ` #${_id} menuitem > .menu-text { font-size: 22px; font-family: Consolas, Rockwell, Verdana; text-align: center; -moz-appearance: none; margin: 0; padding: 0 14px; } #${_id} menuitem > :not(.menu-text) { display: none; } #${_id} menugroup, #${_id} > menupopup > arrowscrollbox { background-color: menu; } `.replace(/;/g, " !important;"); var inserter = { get docShell() { delete this.docShell; return this.docShell = "docShell" in document && document.docShell instanceof Ci.nsIDocShell ? document.docShell : window.docShell; }, get insertText() { delete this.insertText; return this.insertText = text => { if (!this.docShell.isCommandEnabled("cmd_insertText")) return; var params = "createCommandParams" in Components.utils ? Cu.createCommandParams() : Components.classes["@mozilla.org/embedcomp/command-params;1"] .createInstance(Components.interfaces.nsICommandParams); params.setStringValue("state_data", text); this.docShell.doCommandWithParams("cmd_insertText", params); } }, insert(text) { var br = document.activeElement; !br || br.localName != "browser" || !br.isRemoteBrowser ? this.insertText(text) : br.messageManager.loadFrameScript( `data:,(${this.insertText})${encodeURIComponent(text.toSource())}` , false, true); } }; addEventListener("popupshowing", function ps() { removeEventListener("popupshowing", ps, true, popup); if (css) { var dwu = "windowUtils" in window && windowUtils instanceof Ci.nsIDOMWindowUtils ? windowUtils : window.QueryInterface(Ci.nsIInterfaceRequestor) .getInterface(Ci.nsIDOMWindowUtils); var type = dwu.AGENT_SHEET; var url = "data:text/css," + encodeURIComponent(css); dwu.loadSheetUsingURIString(url, type); addDestructor(() => dwu.removeSheetUsingURIString(url, type)); } var df = document.createDocumentFragment(); for(var symbols of columns) { var menugroup = popup.appendChild(document.createElementNS(xulns, "menugroup")); menugroup.setAttribute("orient", "vertical"); for(var sym of symbols.split(" ")) menugroup.appendChild( document.createElementNS(xulns, "menuitem") ).setAttribute("label", sym); } popup.append(df); var parent = "boxObject" in menugroup ? menugroup.boxObject.parentBox : menugroup.flattenedTreeParentNode; if (parent.localName == "slot") parent = parent.parentNode; parent.setAttribute("orient", "horizontal"); if (parent.localName == "scrollbox") parent.style.setProperty("-moz-box-orient", "horizontal", "important"); popup.setAttribute("context", ""); popup.inserter = inserter; popup.setAttribute("oncommand", "inserter.insert(event.target.label);"); popup.onauxclick = e => { var sym = e.target.label; sym && inserter.insert(sym); } }, true, popup); this.prepend(popup); })(document.createElementNS(xulns, "menupopup"));
Есть ли возможность в about:newtab открывать дилы ЛКМ "Топ сайты" в новой вкладке в 71 ?
about:newtab же в другом процессе.
Надеюсь позволительно отказаться от душного
разворачивания чего-либо там, и вообще от всякого
межпроцессного взаимодействия.
Если хочешь рискнуть, то можно так попробовать.
Разумеется не уверен, и да, это дичь, конечно же.
addEventListener("mousedown", { handleEvent(e) { this[e.type](e); }, mousedown(e) { if (e.button || e.ctrlKey || e.shiftKey || e.altKey) return; var {spec} = gBrowser.currentURI; if (spec != "about:newtab" && spec != "about:home") return; var br = gBrowser.selectedBrowser; if (!br.matches(":hover")) return; this.br = br; this.loadURI = br.loadURI; br.loadURI = this.tab; window.addEventListener("mousemove", this, {once: true}); window.addEventListener("keydown", this, {once: true}); }, mousemove() { if (!this.br) return; window.removeEventListener("mousemove", this); window.removeEventListener("keydown", this); this.br.loadURI = this.loadURI; this.loadURI = this.br = null; }, keydown() { this.mousemove(); }, get tab() { delete this.tab; return this.tab = (url, params) => { var {userContextId} = this.br.contentPrincipal; this.mousemove(); openUILinkIn(url, "tab", Object.assign(params, {userContextId})); } } }, true, gBrowser.tabpanels || 1);
Отсутствует
Dumby
Круто , а есть ли вариант впихнуть этот код в этот
Win7
Отсутствует
вариант впихнуть этот код в этот
Ну как, я с userChromeJS-машинерией, в практическом смысле, незнаком
но, полагаю, что это всё примерно одно и то же, скриптовое файло
грузится прямо в окна, только и всего.
Таким образом, если убрать CB-специфику, то можно просто дописать в конец.
В данном случае, меняем в коде первую и последнюю строку.
//addEventListener("mousedown", { location.href.endsWith("/browser.xhtml") && gBrowser.tabpanels.addEventListener("mousedown", { // Посерёдка здесь //}, true, gBrowser.tabpanels || 1); }, true);
Отсутствует
Dumby подскажи как переделать скрипт для СВ
// ==UserScript== // @name Hover Links (v2) // @namespace http://userscripts-mirror.org/scripts/show/30002 // @description A tooltip pops up when hovering over links. // @include * // ==/UserScript== const popTTDelay = 300; //amount of time(in ms) after mouseover before popup (0 for immediatly) var bg_color = "#ffffe0"; var border_color = "#ffd700"; var font_color = "#4682b4"; var font_face = "verdana"; var font_size = "10px"; // sorry, change slyles manually in function create_window :-) var add_favicon = false; const offSBRRight = 24; //horizontal constant. if the popup makes horizontal scrollbars appear, increase this constant until it doesn't (default:18) const offSBRTop = 24; //vertical constant. if the popup makes vertical scrollbars appear, increase this constant until it doesn't (default:18) var ttH, ttW; (function() { function locate(event) { var ttWin = find_window(); if (ttWin) { var tempLeft=(event.clientX + window.pageXOffset)+9; var tempTop=(event.clientY + window.pageYOffset)+10; if( (tempLeft+ttW) > (window.innerWidth+window.pageXOffset-offSBRRight) ) { //if its too far right tempLeft= (window.innerWidth+window.pageXOffset-offSBRRight-ttW-10); } if( (tempTop+ttH) > (window.innerHeight+window.pageYOffset-offSBRTop) ) { //if its too far down tempTop-=(ttH+offSBRTop); } if(tempLeft < window.pageXOffset) { //if it is too far left, i.e. it is a super-wide box tempLeft=window.pageXOffset+1; //set it all the way to the left } ttWin.style.top = tempTop + "px"; ttWin.style.left = tempLeft + "px"; } } function find_window() { return document.getElementById("link_tt"); } function create_window(id, ttTitle) { var tt_err =''; var tt_div = document.createElement("div"); tt_div.setAttribute("id", "link_tt"); tt_div.setAttribute("style", "text-align: left; background:" + bg_color + ";border:1px solid " + border_color + ";padding:2px;color:" + font_color + ";font-family:" + font_face + ";font-size:" + font_size + ";position:absolute;z-index:1000000;"+ 'padding-left: 8px; padding-right: 8px; padding-top: 3px; padding-bottom: 3px; ' + 'max-width: 95% !important; line-height: 1.2 !important; width: auto !important;' + '-moz-border-radius: 0.7em !important;' ); try {var decodedUrl=decodeURIComponent(id.href); } catch (err) { tt_err += '<br><font style="font-size: 8px; color: grey;">'+'bad url )'+'</font>'; decodedUrl=id.href;} // ?? :) var ttUrlHost=decodedUrl.split('/'); ttUrlHost=ttUrlHost[2]; var favIco = ''; if (ttUrlHost) {favIco="<img style='display: none;' onLoad=this.style.display=''; src=http://"+ttUrlHost+"/favicon.ico> ";} else {ttUrlHost='';} var dUrlLeng=decodedUrl.length; var urlPage =decodedUrl.slice(decodedUrl.indexOf(ttUrlHost)+ttUrlHost.length,decodedUrl.length); if (urlPage=='/') {urlPage='';} else {urlPage='<br>'+urlPage;} if (ttTitle) {ttTitle='<font style="font-size: 13px; color: #8b0000;">' + ttTitle+'</font><br>';} else {ttTitle='';} tt_div.innerHTML = ttTitle+favIco + '<font style="font-size: 12px">' + ttUrlHost+'</font>' + urlPage+tt_err; document.body.appendChild(tt_div); ttH=tt_div.offsetHeight; ttW=tt_div.offsetWidth; } function show_windowTT() {if (find_window()) {find_window().style.display = '';} } function kill_window() { if (find_window()) find_window().parentNode.removeChild(find_window()); } function create_event(id) { if (id.title) { var ttTitle = id.title; id.addEventListener("mouseover", function() { create_window(id, ttTitle); }, false); id.title=''; } else {id.addEventListener("mouseover", function() { create_window(id); }, false);} id.addEventListener("mouseout", function() { kill_window(); }, false); id.addEventListener("mousemove", function(event) { locate(event); }, true); if (add_favicon) // add favicon on page before link { var idH = id.href; if(idH&&(!idH.match(document.domain+'|@|javascript:|mailto:'))) { var C=idH.split("/"); id.style.background="url("+C[0]+"//"+C[2]+"/favicon.ico) center left no-repeat"; id.style.paddingLeft="18px"; } } } unsafeWindow.show_windowTT = show_windowTT; var link = document.getElementsByTagName("a"); for (i = 0; i < link.length; i++) { create_event(link[i]); } })()
Отсутствует
Отсутствует
Может не в тему, но https://forum.mozilla-russia.org/viewto … 48#p773048
Кнопка(скрипт) auto-popup перестал работать с 72+, пробовал отдельно как uc.js похоже дело в коде, смотрел консоль но он молчит или.. в общем там много ошибок и ничего не понятно, не знаю вроде то что менялось в коде нет.
Да и код какой-то большой там половина лишняя похоже, надо лишь чтобы попап был в CB и менюшках, а аддоны не нужны.
Не знаю, если не получится придется искать... видел на гитхабе обновленный ну пол года назад, сейчас не тестил но там он тупо все открывает, и быстро, удалил.
Отредактировано func4ptch4 (06-01-2020 20:01:59)
Отсутствует
egorsemenov06
У меня на 72 вот такая кнопка перевода в Google работает
/*Initialization Code*/ 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(); 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:3px;margin:0;z-index:99999;overflow:hidden;cursor:move;'+(typeof w.style.borderRadius === 'string' ? 'background-color:#f3f5f7;padding-top:4px;border-radius:4px;box-shadow:0 0 12px 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); }; var img = doc.createElement('div'); img.setAttribute('style', 'display:block;float:right;width:18px;height:18px;padding:0;margin:0;border:none;cursor:pointer;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAQAAAD8x0bcAAAAZElEQVR42mNgGNyAGQixsVGU/AdCXjCbHczmxKaMFywlAlWiw6DAwIZNmQhYGqJEDWoqFiAGVmKKTwk73CRJ/Ep0GIyhbsPpO4hbIG4TwKaMk0EZ7hYBBk1cvmNDEmbDrmSwAADE8h10+qICXwAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=");background:-o-skin("Caption Close Button Skin");'); img.title = (win.navigator.language.indexOf('ru') == 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:16px Times New Roman;width:auto;height:auto;padding:0;margin:0 2px;cursor:text;'); title.onclick = e => { e.preventDefault(); var url = e.target.href; // Здесь открываем url как хотим. var ctabpos = gBrowser.selectedTab._tPos +1; gBrowser.moveTabTo(gBrowser.selectedTab = gBrowser.addWebTab(url), ctabpos); } var cnt = w.addEle(text, 'display:block;border:1px solid #aaa;margin:2px 0 1px 0;padding:4px;background-color:#fafcfe;color:#000;font:14px Times New Roman;width:240px;height:120px;overflow:auto;cursor:text;'); w.addEle(status, 'display:table;color:#555;font:10px Times New Roman;width:auto;height:auto;padding:0;margin:0 2px;cursor:text;'); w.addEventListener('mousedown', function(e){ if(e.target == w){ e.preventDefault(); var grabX = e.clientX, grabY = e.clientY, origX = parseInt(w.style.left), origY = parseInt(w.style.top); var mouseMove = function(ev){ w.style.left = origX+ev.clientX-grabX+'px'; w.style.top = origY+ev.clientY-grabY+'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 = 50*i+'px'; cnt.style.width = 100*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) { TKK=eval('((function(){var a\x3d817046147;var b\x3d-335196159;return 410049+\x27.\x27+(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)) , 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 } } , 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_translate = function (dir){ var lng = window.navigator.language.slice(0, 2), txt = gContextMenu.selectionInfo.fullText, l = dir.split('|'); var encTxt = encodeURIComponent(txt); var winWait = function(lng){createWindow('', (lng == 'ru' ? '\u041F\u0435\u0440\u0435\u0432\u043E\u0434\u0438\u043C' : '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=t&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 urle = "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')); for(var i = 0, n; n = tmp[0][i]; i++){ if(n[0])result += n[0].toString(); }; result = '<span style="background-color:inherit;color:inherit;font-size:inherit;font-family:Times,serif;">' + result + '</span>'; status = tmp[8][0][0].toUpperCase() + ' -\u203A ' + l[1].toUpperCase(); createWindow(result, status, '<a href="'+urle.replace(/&/g,'&')+'" style="display:inline;padding:0;margin:0;text-decoration:none;border:none;color:#009;font:16px Times New Roman;">Google Translate</a>', '_gt', window.navigator.lastClick); } } catch (x){LOG(x)}; }; xhr.send('q=' + encodeURIComponent(txt)); } else { var urlt = gBrowser.currentURI.spec; var url = "http://translate.google.com/translate?u="+encodeURIComponent(urlt)+"&hl="+lng+"&langpair="+dir+"&tbb=1"; var ctabpos = gBrowser.selectedTab._tPos +1; gBrowser.moveTabTo(gBrowser.selectedTab = gBrowser.addWebTab(url), ctabpos); }; }; var contextMenu = document.getElementById("contentAreaContextMenu"); var nextEleMenu = document.getElementById("context-inspect"); var menuId = "context-ext-google-translate"; var menuItem = document.getElementById(menuId); if (menuItem) { contextMenu.removeChild(menuItem.nextElementSibling); contextMenu.removeChild(menuItem.nextElementSibling); contextMenu.removeChild(menuItem); }; menuItem = document.createXULElement("menuitem"); menuItem.setAttribute("id", menuId); menuItem.setAttribute("label", "Перевести на русский"); menuItem.setAttribute("class", "menuitem-iconic"); menuItem.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMAAAAAAABupgeRAAABBUlEQVR4Ac2RMU4DMRREB2MqihQpAkUaqnAduuQw4Sx03CGcJYIiDYqQ0lCsZ77535ZFcgAkRuPvV7zd/dLiz3N1PFb8hmRckrfELZrF9ONQ1B6Yz0MyM7S0O6zGkVprh/3+Kw/JzkHSpRpJKZkpr9fYbOx0cjVsCbWG31oHBM9mtt0q73ZcrdLhAMlYQKkUI22aqsNo8HKZAMQhvVaKSHWj2Q2aPU3mJQFY7nuHyvYFduP83WF3AJRfcPNYnr/Lp1G1uK4m9sno1LaUbnX/htf8BNzoneUD5NhjvLCMhURQSQ93QCZwXYjFwg3I0NZKrvoknQPMIHkt/jRAQKMeG2yX89/mB4EJbKbZxIhFAAAAAElFTkSuQmCC"); menuItem.addEventListener("command", function(){ujs_google_translate('auto|ru')}, false); contextMenu.insertBefore(menuItem, nextEleMenu); menuItem = document.createXULElement("menuitem"); menuItem.setAttribute("label", "Перевести на английский"); menuItem.setAttribute("class", "menuitem-iconic"); menuItem.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMAAAAAAABupgeRAAAB5UlEQVR4AWOgPZg0c9+Oq2+qpx9LaQaiw4mNB27efbs2uXFNQh2Q4Zm9zSNth23MhqjGnXMC86vnHmUS4udxv7OvOd2yPE7PTlfCTk9GVVEoyJA7WI8dyPA0k3U1l+jJMV7CeThpTZeoKDdDUsvBPSff/V+6/P/Bvf///2+bdvU/EKRm/k9IBNIlfZe+LFrzvbsbyJ636pKkyQyQhoUb7tZNvPpw3/0/TfX/ISAm5n94BIiRm/n/xYsLd946ei4vajoiqDuRAejQf//+o4PQ0P9+fmhiQGVnrr1kXJNYG2zEzXDxDsPv3wy/fkFJoOTPn39+/fr/69e/37//AUX+/mXRkO458wWHDba2f8wswCyQ3N+/f//8/fP7z5+TV18w2Mdt6plzPiptx5Wr7/+/ffMzOR6kysjkt74hWMPfp06O+2dulZCeFZKwnkE4m8E8bN3i9aCQ+dxY96GrK6bkGJD9R1v3l6Y20NVW9kt+/v//ZdbcFwkxTVPPMQimM8XEqkb7a/zoqLxkH9v4zVyI5+///wyMmtKMmhJAnbLqQjHxaw5r2orOmZN5uj470Zahat6BKS7JzpmLBHXm8GhM5lCdcP7ai1ZpixZxk9NXXjKIFzOIFjAI54oY1vXuue5qmscw+AAAW0tKxtPoicEAAAAASUVORK5CYII="); menuItem.addEventListener("command", function(){ujs_google_translate('auto|en')}, false); contextMenu.insertBefore(menuItem, nextEleMenu); contextMenu.insertBefore(document.createXULElement("menuseparator"), nextEleMenu);
Отредактировано Garalf (07-01-2020 14:46:47)
На форуме
Нашел тот AutoPopup.uc.js, но он не универсальный, работает только на аддоны и на гамбургер-меню, не на всех менюшках как тут(не работает на CB), когда проверял на 71 работал везде. Больше тот код(старый) интересует его реанимировать никак? нашел еще такой код, но это же ... столько кнопок, сколько меню, да и работает ли не ясно.
Можно просто маленький код для CB и стандартные окна фф(меню и т.д.) без аддонов сделать?
Хоть пошлите а то сижу как не знаю кто думаю может кто заметит, или хотя бы скажите что трудно и делать не будете, хоть какой-то отклик а то будто самому себе пишу. Прошлый раз писал про кнопку, там код маленький и по теме так тоже игнор, я тут под игнором?
Отредактировано func4ptch4 (08-01-2020 10:02:00)
Отсутствует
Dumby подскажи что изменить в кнопке для 72. Кнопка работает, если включить и выключить персонализацию
/*Initialization Code*/ this.type != "menu" ? this.type = "menu" : (popup => { var inserter = { get docShell() { delete this.docShell; return this.docShell = "docShell" in document && document.docShell instanceof Ci.nsIDocShell ? document.docShell : window.docShell; }, get insertText() { delete this.insertText; return this.insertText = text => { if (!this.docShell.isCommandEnabled("cmd_insertText")) return; var params = "createCommandParams" in Components.utils ? Cu.createCommandParams() : Components.classes["@mozilla.org/embedcomp/command-params;1"] .createInstance(Components.interfaces.nsICommandParams); params.setStringValue("state_data", text); this.docShell.doCommandWithParams("cmd_insertText", params); } }, insert(text) { var br = document.activeElement; !br || br.localName != "browser" || !br.isRemoteBrowser ? this.insertText(text) : br.messageManager.loadFrameScript( `data:,(${this.insertText})${encodeURIComponent(text.toSource())}` , false, true); } }; this.onmousedown = e => { if (e.button) return; this.onmousedown = null; var data, save = () => { var link = custombuttons.makeButtonLink("update", _id); var params = custombuttons.cbService.getButtonParameters(link).wrappedJSObject; params.help = JSON.stringify(data, null, "\t"); custombuttons.cbService.installButton(params.wrappedJSObject = params); } popup.setAttribute("context", ""); popup.setAttribute("onpopupshowing", "firstChild.disabled = !gClipboard.read();"); popup.add = () => save(data.push(gClipboard.read())); var menuitem = popup.appendChild(document.createXULElement("menuitem")); menuitem.setAttribute("label", "Добавить из буфера"); menuitem.setAttribute("oncommand", "parentNode.add();"); if (!(data = JSON.parse(this.Help || "[]")).length) return; popup.insert = ind => inserter.insert(data[ind]); popup.delete = ind => save(data.splice(ind, 1)); var df = document.createDocumentFragment(); df.append(document.createXULElement("menuseparator")); var menugroup = df.appendChild(document.createXULElement("menugroup")); menugroup.setAttribute("oncommand", "parentNode.insert(event.target.index);"); menugroup.setAttribute("orient", "vertical"); menugroup.setAttribute("context", "_child"); var context = menugroup .appendChild(document.createXULElement("menupopup")) .appendChild(document.createXULElement("menuitem")); context.setAttribute("label", "Удалить элемент?"); context.setAttribute("oncommand", "event.stopPropagation(); menupopup.delete(popupNode.index);"); context.menupopup = popup; data.forEach((text, ind) => { var menuitem = menugroup.appendChild(document.createXULElement("menuitem")); menuitem.setAttribute("label", text.trimLeft().replace(/\s+/g, " ").slice(0, 70)); menuitem.index = ind; }); popup.append(df); } })(this.appendChild(document.createXULElement("menupopup")));
/*Initialization Code*/ window.arycb_BBCodeClipboardStrings = this.clipboardStrings = []; // Массив буфера обмена // ------------------------------------------------------- // Функция fHLD_Get_ListClipboardPrim // получить список сохранёного буфера обмена // fnHLD_Get_ListClipboardPrim = function (){ var cs = arycb_BBCodeClipboardStrings; return (cs.slice(0)); }; //Список сохранёного буфера обмена //Не вызываем это, обработка по таймеру или по событию ЛКМ //-----Обработчики буфера обмена this.MAX_ENTRIES = 16; //Максимальное число записей 16 this.CHECK_INTERVAL = 1000; //Время опроса буфера 1000 миллисекунд this.type = "menu"; this.orient = "horizontal"; this._menupopup = this.appendChild(document.createXULElement("menupopup")); this._menupopup.setAttribute("oncommand", "this.parentNode.handleCommand(event.target);"); this.checkClipboard = function() { var clipStr = readFromClipboard(); if(clipStr && this.clipboardStrings.indexOf(clipStr) == -1) this.storeString(clipStr); }; this.storeString = function(str) { var cs = this.clipboardStrings; cs.push(str); while(cs.length > this.MAX_ENTRIES) cs.shift(); var mi = document.createXULElement("menuitem"); mi.setAttribute("label", str); this._menupopup.appendChild(mi); while(this._menupopup.childNodes.length > this.MAX_ENTRIES) this._menupopup.removeChild(this._menupopup.firstChild); }; this.handleCommand = function(mi) { var indx = Array.indexOf(mi.parentNode.childNodes, mi); if(indx != -1) inserter.insert(this.clipboardStrings[indx]); }; var inserter = { get docShell() { delete this.docShell; return this.docShell = "docShell" in document && document.docShell instanceof Ci.nsIDocShell ? document.docShell : window.docShell; }, get insertText() { delete this.insertText; return this.insertText = text => { if (!this.docShell.isCommandEnabled("cmd_insertText")) return; var params = "createCommandParams" in Components.utils ? Cu.createCommandParams() : Components.classes["@mozilla.org/embedcomp/command-params;1"] .createInstance(Components.interfaces.nsICommandParams); params.setStringValue("state_data", text); this.docShell.doCommandWithParams("cmd_insertText", params); } }, insert(text) { var br = document.activeElement; !br || br.localName != "browser" || !br.isRemoteBrowser ? this.insertText(text) : br.messageManager.loadFrameScript( `data:,(${this.insertText})${encodeURIComponent(text.toSource())}` , false, true); } }; setInterval(function(button) { button.checkClipboard(); }, this.CHECK_INTERVAL, this); this.setAttribute("onpopupshowing", "this.checkClipboard();"); var ios = Components.classes["@mozilla.org/network/io-service;1"]. getService(Components.interfaces.nsIIOService); var sss = Components.classes["@mozilla.org/content/style-sheet-service;1"]. getService(Components.interfaces.nsIStyleSheetService); var css = new String(); css = css + '@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");'; css = css + 'tooltip[label^="' + this.label + '\\000a\\000a"] {'; css = css + "-moz-appearance: none !important;"; css = css + "border: 1px solid silver !important;"; css = css + "max-width: none !important;"; css = css + "background: black !important;"; css = css + "color: silver !important;"; css = css + "font-family: monospace !important;"; css = css + "}"; var uss = ios.newURI("data:text/css," + encodeURIComponent(css), null, null); if (!sss.sheetRegistered(uss, sss.AGENT_SHEET)) sss.loadAndRegisterSheet(uss, sss.AGENT_SHEET); this.onDestroy = function(reason) { if (reason == "update") { if (sss.sheetRegistered(uss, sss.AGENT_SHEET)) sss.unregisterSheet(uss, sss.AGENT_SHEET); } if (reason == "delete") { if (sss.sheetRegistered(uss, sss.AGENT_SHEET)) sss.unregisterSheet(uss, sss.AGENT_SHEET); } } this.showClipboard = function() { var code = custombuttons.cbService.readFromClipboard(); this.tooltipText = code ? this.label + "\n\n" + code: this.label; } this.setAttribute("onmouseover", "this.showClipboard()");
this.handleCommand = function(mi) { var indx = Array.indexOf(mi.parentNode.childNodes, mi); if(indx != -1) inserter.insert(this.clipboardStrings[indx]); };
Отредактировано Andrey_Krropotkin (08-01-2020 15:54:47)
Отсутствует
Хоть пошлите а то сижу как не знаю кто думаю может кто заметит, или хотя бы скажите что трудно и делать не будете, хоть какой-то отклик а то будто самому себе пишу. Прошлый раз писал про кнопку, там код маленький и по теме так тоже игнор, я тут под игнором?
Это про «New Button at Right from current»?
Если так, то да, небольшой момент игнора есть.
Дело в том, что не так давно обсуждалось,
и тут опять вдогонку снова-здорово.
Теперь уже можешь пробовать ставить.
А насчёт трудно, для меня, например, да.
Просидел несколько часов, и ничего не получилось.
подскажи что изменить
Первую строку.
Там, как-бы, небольшая оптимизация под XBL, чтобы
код не исполнялся целиком при переинициализации,
которая происходила при установке this.type = "menu"
Но XBL теперь тю-тю, а при соответствующей переделке в CB,
я не стал делать какую-либо специальную мимикрию,
чтобы принудително имитировать эту особенность кнопок.
Получилась некая несовместимость, но, думаю,
так оформленных кнопок не должно быть много.
Вобщем, попробуй заменить на
(this.type != "menu" && (this.type = "menu") && !this.hasAttribute("is")) || (popup => {
требуется заменить Array.indexOf (на что?)
Парочка вариантов
var indx = Array.prototype.indexOf.call(mi.parentNode.childNodes, mi);
var indx = Array.from(mi.parentNode.childNodes).indexOf(mi);
Отсутствует
Dumby спасибо, все работает
Отсутствует
Вопрос к знающим людям.
Если мне надо получить список линков на текущей странице, я получаю это так:
var links = window.document.getElementsByTagName("a");
и alert(links.lenght) говорит сколько на ней линков
Как мне получить список линков на другой странице, заданной url?
Я пытался сделать это так:
var g = document.createElement("window");
g.src = 'https://youtu.be/8PvVaYmjlk4';
var links = g.document.getElementsByTagName("a");
alert(links.lenght);
Однако
var links = g.document.getElementsByTagName("a");
всё портит - до алерта вообще не доходит.
Как же мне получить список линков на другой странице, заданной url, удалённо, то есть не заходя на неё?
Отредактировано difabor (11-01-2020 04:29:04)
Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©
Отсутствует
difabor. Есть у мя такая ф-ция для этого дела. Как на 57+ не знаю, пользуюсь на PM и >57 .
Т.к. это все находися в меню, то сделано через this. Замени на function getUrls() { и вызывай отдельно.
// ---------------------------- Взять все Ссылки на странице ---------------------------------------------------------------- this.getUrls =()=> { const foStream = Cc["@mozilla.org/network/file-output-stream;1"].createInstance(Ci.nsIFileOutputStream); let process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); let prof = Services.dirsvc.get('ProfD', Ci.nsIFile); prof.append("custombuttons"); prof.append("urllist" + Math.random() + ".txt"); let win = document.commandDispatcher.focusedWindow, doc = win.document; let sel = doc, winSel = win.getSelection(); if(winSel.toString()){ sel = doc.createElement('div'); sel.appendChild(winSel.getRangeAt(0).cloneContents()); }; let str = '', links = sel.getElementsByTagName('a'); for(let i = 0, lnk; lnk = links[i]; i++) { if(lnk.href)str += lnk.href + '\r\n' }; // в буфер берем домен сайта, для своих нужд. другая ф-ция берет домен, здесь не привожу. // gClipboard.write(getDomain()); foStream.init(prof, 0x02|0x08|0x20, 0666, 0); foStream.write(str, str.length); foStream.close(); launchAP(prof); // можно просто сразу запустить файл с сылками в текстовом редакторе ОС. // тогда то шо ниже разделителя убрать\закоментить // file.launch(); // ---------------------------------------------------------------------------- function launchAP(file) { progPath = PROF.path + "\\SOFT_PM\\AkelPad-my\\sAkelPad.cmd"; arg = [file.path]; startProcess(progPath, arg); // тоже другая ф-ция, проверяет параметры, наличие файла и запускает программу. не стандартная. не привожу(есть тут на форуме) } // ----------------------------------------------------------------------------- };
Добавлено 11-01-2020 05:16:19
ай, не понял что надо. Звиняй, не то.
Надо ж наверное загрузить этот документ который в window и только потом считать ссылки. Онож незагруженно и ничего не считает КМК.
Отредактировано mokujin (11-01-2020 05:16:19)
...программисты словно войну какую-то ведут за свои обновления. Блин, почему сейчас повсюду мания ухудшать интерфейсы и делать их максимально неудобными?! Radiation
Отсутствует
difabor. Есть у мя такая ф-ция для этого дела. Как на 57+ не знаю, пользуюсь на PM и >57 .
Т.к. это все находися в меню, то сделано через this. Замени на function getUrls() { и вызывай отдельно.
...
Добавлено 11-01-2020 05:16:19
ай, не понял что надо. Звиняй, не то.
Надо ж наверное загрузить этот документ который в window и только потом считать ссылки. Онож незагруженно и ничего не считает КМК.
Спасибо, mokujin!
Вот мне и нужно как-то загрузить этот документ...
Причём, я хочу это сделать скриптом и не зависеть ни от СВ ни от браузера.
Моя мозилла полетела с треском, я уже неделю её пытаюсь привести в чувство, пока сижу на Гугл Хроме и пытаюсь что-то наворотить на Тамперманки (аналог Грэйсманки)
Отредактировано difabor (11-01-2020 07:08:51)
Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©
Отсутствует
difabor попробуй
javascript:var sLFd=document,DlnK=document.links;sLFw=window.name;w=window.open();w.document.write('<base%20target='+sLFw+'><b>%20Всего%20ссылок '+DlnK.length+' с</b>:<br><b>'+sLFd.title+'</b><br>'+sLFd.URL.link(sLFd.URL)+'<hr>');for(lNK=0;lNK<DlnK.length;lNK++) w.document.write('<p>'+'<b>'+lNK+'. '+'</b>'+DlnK[lNK].text+' '+DlnK[lNK].href.link(DlnK[lNK]));
//Добавыть в контекстное меню страницы пункт "Запомнить изображение как base64".......................................................................................... (popup => addEventListener("popupshowing", { handleEvent(e) { if (this.shouldHide) return; var menuitem = document.createXULElement("menuitem"); menuitem.id = "content-baseItem"; menuitem.className = "menuitem-iconic"; menuitem.setAttribute("oncommand", "copyImageAsBase64()"); menuitem.setAttribute("label", "Запомнить изображение как base64"); menuitem.setAttribute("image", "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AIAQ/wCAEf8AgA//AIAR/wCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AgBX/AIAVAAAAAAAAAAD/AIAo/wCA//8AgP//AID//wCA//8AgP//AIAoAAAAAAAAAAAAAAAAAAAAAP8AgBL/AID//wCA//8AgA3/AIAL/wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgBAAAAAAAAAAAAAAAAD/AIAR/wCA//8AgP//AIAK/wCACv8AgP//AID//wCAIf8AgAX/AIAh/wCA//8AgP//AIAQAAAAAAAAAAAAAAAA/wCACv8AgP//AID//wCAB/8AgAf/AID//wCA//8AgAUAAAAA/wCABf8AgP//AID//wCACgAAAAD/AIAQ/wCADP8AgCH/AID//wCA//8AgAf/AIAH/wCA//8AgP//AIAh/wCABf8AgCH/AID//wCA//8AgAv/AIAh/wCA//8AgP//AID//wCA//8AgP//AIAH/wCAB/8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AIAg/wCA//8AgP//AID//wCA//8AgP//AID//wCAB/8AgAf/AID//wCA//8AgP//AID//wCA//8AgP//AIAh/wCAC/8AgP//AID//wCAHP8AgBz/AID//wCA//8AgAf/AIAH/wCA//8AgP//AIAh/wCACf8AgA7/AIAMAAAAAP8AgAj/AID//wCA//8AgAP/AIAD/wCA//8AgP//AIAH/wCAB/8AgP//AID//wCABQAAAAAAAAAA/wCADf8AgAr/AIAL/wCA//8AgP//AIAH/wCAB/8AgP//AID//wCAB/8AgAr/AID//wCA//8AgCH/AIAH/wCAJf8AgP//AID//wCAI/8AgP//AID//wCAB/8AgAf/AID//wCA//8AgAf/AIAL/wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgCT/AID//wCA//8AgAr/AIAK/wCA//8AgP//AIAKAAAAAP8AgCj/AID//wCA//8AgP//AID//wCA//8AgCP/AIAM/wCA//8AgP//AIAN/wCADf8AgP//AID//wCADQAAAAAAAAAA/wCAEP8AgBH/AIAP/wCAEf8AgBAAAAAAAAAAAP8AgBT/AIAVAAAAAAAAAAD/AIAV/wCAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+sQcH5rEGA8KxBAHCsQQBwrEEIQKxBAACsQQAArEEAAKxBAQCsQQwArEEAAKxBAACsQYAArEHBmaxB//+sQQ=="); popup.append(menuitem); addDestructor(() => menuitem.remove()); menuitem.copyImageAsBase64 = () => gBrowser.selectedBrowser.messageManager .loadFrameScript("data:;charset=utf-8," + encodeURIComponent(this.code()), false); this.handleEvent = () => menuitem.hidden = this.shouldHide; }, get shouldHide() { return !gContextMenu.onImage; }, code: () => `(selectors => { var getImage = doc => { var elm = doc.querySelector(selectors.shift()); if (selectors.length) elm = getImage(elm.contentDocument); return elm; } var image = getImage(content.document); var canvas = image.ownerDocument.createElementNS("${xhtmlns}", "canvas"); canvas.width = image.naturalWidth; canvas.height = image.naturalHeight; var ctx = canvas.getContext("2d"); ctx.drawImage(image, 0, 0); var base64 = canvas.toDataURL(); Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper) .copyStringToClipboard(base64, Ci.nsIClipboard.kGlobalClipboard); Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService) .showAlertNotification(base64, "${self.label}", "Запомнил изображение как base64"); })(${ JSON.stringify(gContextMenu.targetSelectors) })` }, false, popup || 1))(document.getElementById("contentAreaContextMenu"));
cmd() { var msg = "CB:GetImageScreenRectForMosuseZoom"; var code = `(selectors => { var doc = content.document; for(var sel of selectors) { var node = doc.querySelector(sel); node instanceof HTMLImageElement ? sendAsyncMessage("${msg}", Object.assign( {src: node.currentSrc}, BrowserUtils.getElementBoundingScreenRect(node) )) : doc = node.contentDocument; } })(`; messageManager.addMessageListener(msg, this); addDestructor(() => messageManager.removeMessageListener(msg, this));
Отредактировано Andrey_Krropotkin (11-01-2020 13:59:18)
Отсутствует
Я что-то совсем не понял.
Мне нужно как-то загрузить документ со страницы, например, https://lenta.ru/, а нахожусь я на другой странице, напр. на этом форуме.
Как это сделать?
Когда я пытаюсь определить некую переменную g как var g = document.createElement("window");
то g.src = 'https://lenta.ru/'; для объекта window не релевантно: он не создаёт полноценно этот объект
Когда же я пытаюсь определить g как var g = document.createElement("iframe");,
то b]g.src = 'https://lenta.ru/';[/b] релевантно для объекта iframe,
но для iframe не релевантно var links = g.document.getElementsByTagName("a"); которое релевантно для window
Получается замкнутый (для меня) круг:
Я не могу создать g как window т.к. для него вообще не релевантно g.src,
и хотя могу создать g как iframe, но не знаю, как получить от него список линков,
поскольку для iframe не релевантно вот это: g.document.getElementsByTagName("a");
Получается замкнутый круг...
Отредактировано difabor (11-01-2020 14:02:08)
Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©
Отсутствует
difabor да я Вас не дочитал до конца, этот скрипт дает ссылки с текущей страницы, на которой Вы находитесь. Попробую доделать
Отсутствует
difabor да я Вас не дочитал до конца, этот скрипт дает ссылки с текущей страницы, на которой Вы находитесь. Попробую доделать
Спасибо, Андрей.
Мне нужно создать объект по урл который будет содержать линки, подобно объекту window и знать как получить список этих линков.
Собственно говоря, число линков мне особо не важно - я просто с помощью alert(links.length) проверяю или я получил линки в переменную links или не получил.
Для меня самое важное - получить линки в некую переменную, которую я обозвал links.
Если я на текущей странице - у меня нет проблем, я получаю линки так:
var links = window.document.getElementsByTagName("a");
и дальше знаю, что с этим делать.
Проблема в том, что я не знаю как создать объект типа window, задав урл (подобно iframe),
а если я создаю объект типа iframe по урл, то не знаю как получить линки типа ххх.document.getElementsByTagName("a");
То есть мне нужно:
- либо знать как можно получить объект типа window но с заданным урл, тогда дальше я знаю, что делать,
- либо знать как от объекта iframe получить список линков (я ведь даже не знаю, содержит iframe линки подобно window или нет);
Если я получу список линков, дальше я сам знаю что делать.
Отредактировано difabor (11-01-2020 15:37:16)
Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©
Отсутствует
difabor там чуть посложней будет, чтобы получить линки в некую переменную - links, надо скорей всего формировать GET запрос страницы, получить ответ и вставить, примерно как перевод в окне.
Отсутствует