2

Ich habe eine Chrome-Erweiterung, die ich einige der DOM auf GitHub manipulieren möchte. Alles funktioniert wie erwartet, wenn ich eine bestimmte Seite aktualisiere, aber wenn ich zu dieser Seite navigiere, wird das Skript normalerweise nicht ausgeführt.Chrome-Erweiterung läuft nur auf Aktualisieren, nicht auf Seitennavigation

manifest.json

{ 
    "manifest_version": 2, 

    "name": "Name", 
    "description": "Detailed description", 
    "version": "1.3.5", 
    "content_scripts": [{ 
     "matches": ["https://github.com/*/*/issues/*"], 
     "js": ["jquery-2.1.0.min.js", "index.js"] 
    }], 
    "browser_action": { 
     "default_icon": "icon.png" 
    }, 
    "permissions": [ 
     "activeTab", 
     "https://ajax.googleapis.com/" 
    ] 
} 

index.js

$(document).ready(function() { 
    // DOM manipulating code 
    // removed for brevity 
}); 
+0

Github verwendet die Geschichte API für die Site-Navigation, müssten Sie die Geschichte pushState-Funktion, [wie über Änderungen der Geschichte über history.pushState benachrichtigt werden?] (Http://stackoverflow.com/questions/4570093/how-to-get-notified-über-history-via-history-pushstate) –

+0

@ZigMandel die vorgeschlagene Lösung in diesem Beitrag funktioniert nicht in meiner Situation weiter, also habe ich eine neue Frage gestellt. – James

+0

@James, Wenn du etwas versucht hast und es nicht funktioniert hast, solltest du es in deiner Frage erwähnen. Wenn Sie das nicht tun, verschwenden Sie einfach die Zeit der Menschen, die Sie um Hilfe bitten. – Makyen

Antwort

1

Wenn Sie auf eine GitHub Seite von einem anderen zu navigieren, ist ein Container auf der Seite aktualisiert, nicht die gesamte Seite .

Also, aus meiner Erfahrung ... Wenn Sie von der Hauptseite eines Repos starten und zur Seite mit den Problemen wechseln, merkt sich die Erweiterung diese Änderung nicht immer. Daher würde ich vorschlagen, das Manifest matches alle Github zu ändern und nicht nur die Themen:

{ 
    "manifest_version": 2, 
    "name": "Name", 
    "description": "Detailed description", 
    "version": "1.3.5", 
    "content_scripts": [{ 
     "matches": ["https://github.com/*"], 
     "js": ["jquery-2.1.0.min.js", "index.js"] 
    }], 
    "browser_action": { 
     "default_icon": "icon.png" 
    }, 
    "permissions": [ 
     "activeTab", 
     "https://ajax.googleapis.com/" 
    ] 
} 

Wenn das nicht funktioniert, dann im Code, überwacht das Dokument für ein „pjax: Ende“ event:

document.addEventListener("pjax:end", function() { 
    // run code/call function 
}); 
+0

Wann wird das Ereignis "pjax: end" ausgelöst? Ich habe versucht, beide Ihre Vorschläge zu implementieren und das Problem besteht immer noch – James

+0

Diese Lösung sollte funktionieren, ich verwende den gleichen Ansatz. @James, stellen Sie sicher, dass Sie die gesamte Erweiterung und die Site neu geladen haben (um neues Inhaltsskript mit pjax: end neu einzufügen). – wOxxOm

+0

"pjax: end" wird ausgelöst, nachdem GitHub den neuen Inhalt in den Zielcontainer geladen hat. – Mottie