2016-07-10 19 views
0

Ich schreibe eine Safari-Erweiterung für den persönlichen Gebrauch, die URLs von einer bestimmten Website ändert, um extrem kleine Vorschaubilder richtig anzeigen zu lassen. Die URLs sind in folgendem Format:Ersetzen einer Anfrage-URL vor dem Laden der Seite mit einer Safari-Erweiterung

https://static.example.com/data/thumb/eb68634f5a5e3959e03be2af7c0b88ab.png 

Ich möchte jedoch vor Belastung der thumb/ aus der URL Streifen aus, so dass es das Original, Bild in voller Größe zu laden, die dann unterschiedlich angezeigt werden, um einen injizierten Sheet mit (was bereits funktioniert).

Ich verstehe, dass die beforeload Zuhörer in der Lage sein kann, mir zu helfen, aber ich habe nicht in der Lage, angemessene Dokumentation zu finden, wie ich gehen würde im Wesentlichen Neuschreiben von Anfragen während auf dieser Website.

Die vorhandene URL wird abgerufen und geändert. Ich verwende den folgenden Testcode:

document.addEventListener("beforeload", handleBeforeLoadEvent, true); 

function handleBeforeLoadEvent(event) 
{ 
    if(event.url.match(/https:\/\/static.example.com\/data\/thumb\/(.+)/g)) { 
     console.log(event.url.replace("thumb/", "")); 
    } 
} 

Welche gibt, wie erwartet, URLs dieser Art:

https://static.example.com/data/eb68634f5a5e3959e03be2af7c0b88ab.png 

Aber es immer noch nicht gesetzt die event.url auf einen neuen Wert. Ich kann event.preventDefault() zu Abbrechen der Anfrage, aber ich muss die URL ändern.

Ich hoffe, dass mir jemand dabei helfen kann! Bonuspunkte, wenn es theoretisch auch in Firefox und Google Chrome Webbrowsern funktionieren könnte, da ich diese Browser regelmäßig nutze.

Antwort

1

Die Eigenschaft event.url ist schreibgeschützt. Aber so etwas wie dies funktionieren soll:

document.addEventListener('beforeload', function (evt) { 
    if (evt.target instanceof HTMLImageElement) { 
    if (/https?:\/\/static\.example\.com\/data\/thumb\//.test(evt.url)) { 
     evt.preventDefault(); 
     evt.target.src = evt.target.src.replace('/thumb', ''); 
    } 
    } 
}, true); 

Das heißt, Sie target Eigentum Verwendung der Veranstaltung machen, zunächst zu prüfen, ob das Ziel ein Bild ist, und wenn ja, auf das src Eigenschaft des Bildes zu ändern.

+0

Das funktioniert; aber ich hatte gerade ein ernsthaftes Problem - manchmal ist das Original kein PNG. Das Thumbnail ist immer ein PNG. Weißt du, ob es eine Möglichkeit gibt, JPG, PNG und GIF zu "pingen", um zu sehen, ob sie die Erweiterung sind? – Forest

+0

Nein. Wenn Sie wirklich entschlossen sind, könnten Sie versuchen, jede dieser Bildmöglichkeiten unsichtbar zu laden und dann die geladene (mit dem 'load' Ereignis) zu enthüllen und die anderen zu verwerfen. – canisbos