Foren
Neue Beiträge
Foren durchsuchen
Was ist neu?
Neue Beiträge
Profilnachrichten
Online
Anmelden
Registrieren
Aktuelles
Suche
Suche
Nur Titel durchsuchen
Von:
Neue Beiträge
Foren durchsuchen
Menü
Anmelden
Registrieren
App installieren
Installieren
Programmierung
JavaScript
Script Erweiterung funktioniert nur bedingt + nodeJS Inspiration
JavaScript ist deaktiviert. Für eine bessere Darstellung aktiviere bitte JavaScript in deinem Browser, bevor du fortfährst.
Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen
alternativen Browser
verwenden.
Auf Thema antworten
Beitrag
[QUOTE="Sumalemy, post: 8383, member: 1866"] Grüßt euch, wir kennen uns noch nicht, aber der Dogu hat mir die Möglichkeit angeboten, eine Anfrage von mir, an euch weiterzureichen und zwar betrifft diese ein Javascript, was ich aufgrund fehlender Erfahrung nicht erweitert bekomme. Es geht um folgendes: Ich habe hier ein Script, welches nichts anderes tut, als eine Seite nach Links zu durchsuchen, welche in einer Blacklist mittels kommar getrennt gepeichert sind Beispiel: (*test.de,test.de*,*test.de*) und der URL eben den Zusatz: "https://archive.today/?run=1&url=" anzuhängen bzw. Vorne ran zu stellen. Das Script in Rohfassung: [CODE]{if ARCHIVEIS_ACTIVE && !$archiveIsBlacklist|empty} <script data-relocate="true"> var allLinks = document.links; var archiveIsBlacklist = JSON.stringify({@$archiveIsBlacklist}); for(var i=0; i < allLinks.length; i++) { var link = allLinks[i]; if(archiveIsBlacklist.includes(link.hostname)) { link.href = "https://archive.today/?run=1&url=" + link.href; } for(var j=0; j < JSON.parse(archiveIsBlacklist).length; j++) { var blacklistLink = JSON.parse(archiveIsBlacklist)[j]; if(blacklistLink.includes('*')) { var blacklistLinkRegex = blacklistLink.split('*').join('.*'); blacklistLinkRegex = "^" + blacklistLinkRegex + "$"; if(link.hostname.match(new RegExp(blacklistLinkRegex))) { link.href = "https://archive.today/?run=1&url=" + link.href; } } } } </script> {/if}[/CODE]Das klappt auch wunderbar bisher, allerdings ist das ganze etwas kontraproduktiv und soll entsprechend abgeändert- und um eine weitere Funktion erweitert werden. Wenn die Links aus der Blacklist gefunden wurden, soll sich mittels Klick auf den entsprechenden Link, eine Dialogbox öffnen. Das ganze habe ich auch irgendwie hinbekommen und das Script sieht dann folgendermaßen aus: [CODE]{if ARCHIVEIS_ACTIVE && !$archiveIsBlacklist|empty} <script data-relocate="true"> var allLinks = document.links; var archiveIsBlacklist = JSON.stringify({@$archiveIsBlacklist}); for(var i=0; i < allLinks.length; i++) { var link = allLinks[i]; if(archiveIsBlacklist.includes(link.hostname)) { link.href = "https://archive.today/?run=1&url=" + link.href; // Klasse anhängen um den Dialog öffnen zu können var tags = document.getElementsByClassName("externalURL"); for(var i=0; i<tags.length; ++i){ if(typeof tags[i] === "object" && "classList" in tags[i]){ tags[i].classList.add("jsStaticDialog"); tags[i].setAttribute("data-dialog-id", "dialogInfobox"); } } // ENDE } for(var j=0; j < JSON.parse(archiveIsBlacklist).length; j++) { var blacklistLink = JSON.parse(archiveIsBlacklist)[j]; if(blacklistLink.includes('*')) { var blacklistLinkRegex = blacklistLink.split('*').join('.*'); blacklistLinkRegex = "^" + blacklistLinkRegex + "$"; if(link.hostname.match(new RegExp(blacklistLinkRegex))) { link.href = "https://archive.today/?run=1&url=" + link.href; } } } } </script> {/if} <div id="dialogInfobox" class="jsStaticDialogContent" style="display: none" data-title="Test Titel"> <p id="showURL">URL hier übergeben</p> </div>[/CODE]Jetzt ist es aber so, dass ALLE Links auf einmal diese Dialogbox angezeigt bekommen und somit beschränkt sich das ganze leider nicht nur auf die Links aus der Blacklist. Das würde ich gerne abgeändert bekommen, sodass es eben doch nur diese entsprechenden Links betrifft. Außerdem soll mittels ID oder anderer Möglichkeit, die URL an die Dialog-Box übergeben werden, sodass man die URLs als Variable innerhalb eines Textes benutzen kann. Zudem muss der zusätzliche Code [CODE] // Klasse anhängen um den Dialog öffnen zu können var tags = document.getElementsByClassName("externalURL"); for(var i=0; i<tags.length; ++i){ if(typeof tags[i] === "object" && "classList" in tags[i]){ tags[i].classList.add("jsStaticDialog"); tags[i].setAttribute("data-dialog-id", "dialogInfobox"); } } // ENDE[/CODE]Doch auch in dem unteren Bereich verbaut werden oder? Aber wenn ich das tue, funktioniert das ganze Script nicht mehr. Da würde ich mich sehr freuen, wenn das jemand eventuell umsetzen könnte. Die andere Funktion, scheint ser viel komplizierter zu sein und da hört es bei mir sowieso ganz auf. Und zwar habe ich von jemanden ein nodeJS-Script bekommen, dass dort Links auf archive.is übergeben werden und man sofort den Link des Archives erhält. Das Script sieht folgendermaßen aus und sollte, wenn möglich bitte verbaut werden. Kurz noch zu dem Szenario wie das Script am Ende funktionieren soll: Das Script sucht wie zuvor nach den entsprechenden Links aus der Blacklist. Wenn gefunden, soll die Dialog-Box ermöglicht werden. Inhalt der Box (Beispiel) "Sie rufen die Seite {URL} auf, welche über archive.is archiviert wird.". Mittels Klick auf "OK", soll dann eben das entsprechende Script (unten nodeJS) in Aktion treten und die URL dann über archive.is leiten und somit an den generierten Archive-Link umleiten. nodeJS savepage.js [CODE]const cheerio = require('cheerio') const axios = require('axios') const qs = require('qs') const getArchiveIsSubmitId = require('../lib/getArchiveIsSubmitId') module.exports = async function (pageToSave) { // const makeRequest = async function (pageToSave) { // get fresh submitId const submitId = await getArchiveIsSubmitId() // console.log('got submitid: ', submitId) let response = await axios({ url: 'http://archive.is/submit/', method: 'POST', headers: { 'content-type': 'application/x-www-form-urlencoded' }, data: qs.stringify({ url: pageToSave, submitId }), }).catch((err) => { return false }) if (response.data.includes('document.location.replace')) { console.log(response.data.slice(70, 97)) return response.data.slice(70, 97) } else if (response.data.includes('Attention Required')) { console.log('Cloudflare...') return false } else if (response.request.res.responseUrl) { console.log(response.request.res.responseUrl) return response.request.res.responseUrl } else { console.log('Nothing found: ', response) return false } }[/CODE]getArchiveIsSubmitld.js [CODE]const cheerio = require('cheerio') const axios = require('axios') const url = 'http://archive.is/' module.exports = async function getSubmitId() { // const run = async function getSubmitId() { axios.get(url) .then(response => { const submitId = cheerio('input[type="hidden"]', response.data).val() // console.log('submitid: ', submitId) if(!submitId) { console.error('unable to get submitid... proxy ?') } return submitId }) .catch(err => { return false }) }[/CODE]Ich wäre zutiefst dankbar für Hilfe. LG [/QUOTE]
Zitate
Authentifizierung
Antworten
Programmierung
JavaScript
Script Erweiterung funktioniert nur bedingt + nodeJS Inspiration
Oben
Unten