Zum deaktivieren der facebook-hotkeys mit der Chrome-Erweiterung?
Habe ich eine Chrome-Erweiterung, die verwendet Sie die Tastenkombinationen [Alt]+[0...9], um nur zu entdecken facebook verwendet dieselben hotkeys. Ist es irgendwie möglich meine Erweiterung deaktivieren facebook die hotkeys so an, dass mein Feuer allein? Ich bin mir ziemlich sicher, dass ich identifiziert habe den code facebook nutzt für die Umsetzung Ihrer [Alt]+[0...9] hotkeys:
document.documentElement.onkeydown=function(a){a=a||window.event;var b=a.target||a.srcElement;var c=a.keyCode==13&&!a.altKey&&!a.ctrlKey&&!a.metaKey&&!a.shiftKey&&CSS.hasClass...
Dies ist in einem Skript aufgerufen, aus dem Kopf des Dokument-root. Ich habe versucht, die folgenden deaktivieren:
//contents script:
$().ready( function() {
document.documentElement.onkeydown = '';
});
und sogar
$().ready( function() {
document.documentElement.onkeydown = function(e){};
});
Ich vermute weiter, dass der Grund keiner dieser versuche funktioniert, ist, weil obwohl Chrome Erweiterung der Inhalte-Skripte teilen sich ein DOM mit jeder Webseite, auf der Sie laufen, Sie vielleicht nicht teilen Codierung Umgebungen? Einsicht wäre dankbar!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre intuition richtig ist, das JavaScript, das läuft von einem content-Skript als Teil einer Chrome-Erweiterung ist in einer sandbox laufen lassen, die keinen Zugriff auf das JavaScript, das ausgeführt wird, in die Sie enthaltende Seite.
Pro die Chrom-doc auf der Content-Skripte:
First off, würde ich empfehlen, dass Sie prüfen verschiedene shortcut-Tasten. Überschreiben der Funktionalität der vorhandenen Tastenkombinationen für die eigene Erweiterung könnte ein rütteln user experience für jemanden, der erwartet, dass die Facebook-Verknüpfung-Taste. Stell dir vor, wenn eine Erweiterung überschrieb die Strg-c und Strg-p-Verknüpfungen, die einen Teil des desktop-OS für das kopieren und einfügen - ich denke, Sie würden einige verärgert Benutzer, die würde wahrscheinlich entfernen Sie die Sache, dass sich das Verhalten lernten Sie vor.
Jedoch, wenn Sie hartnäckig sind, dann ist hier ein workaround für das laden von JavaScript, die ausgeführt wird, im Kontext der enthaltenden Seite:
Edit: Aktualisiert per Kommentar zu Referenz JS-Datei in plugins statt einem, im web gehostet
Erste, Sie benötigen, um erstellen Sie eine JavaScript-Datei in Ihrem chrome-plugin:
override-fb-hotkeys.js
.Zunächst müssen Sie die host eine JavaScript-Datei irgendwo im web, die das Skript enthält, das Sie ausführen möchten, auf der Seite, lassen Sie uns sagen, du host es:http://example.com/override-fb-hotkeys.js
.Dann, von Ihrem Inhalt Skript können Sie ein script-tag in den DOM, dass die Verweise Ihre JavaScript-Datei, so etwas wie dieses:
JavaScript wird dann heruntergeladen und ausgeführt, die im Kontext der enthaltenden Seite benutzt werden, nicht die in einer Sandbox ausgeführten code aus der Chrome-plugin.
script.setAttribute("src", chrome.extension.getURL("override-fb-hotkeys.js") );
jedoch den codedocument.documentElement.onkeydown = function(e){};
innerhalb der injizierten Datei nicht deaktivieren, die fb-Verknüpfungen, so dass jede weitere Hilfe wäre willkommen!Chrome Content-Skripts ausgeführt werden, in einer Sandbox-Umgebung [Quelle]. Es gibt keine direkte Möglichkeit zur Kommunikation mit dem globalen (
window
) Objekt.Ein weiterer häufiger Fehler ist, dass der Entwickler vergisst, wie/wenn das Skript injiziert.
DOMContentLoaded
gefeuert hat,window.onload
kann oder kann nicht gefeuert haben).Injizieren ein kleines script, ich empfehle fügen Sie den code direkt in das Content-Skript:
Wenn Sie sicherstellen möchten, dass die Methode nicht überschrieben werden, können Sie
- Objekt.defineProperty
, zu definieren, eine unveränderliche Eigenschaft:Den zuvor genannten Methode wird unterstützt Firefox 4+ und mindestens Chrome 5+. Wenn Sie wollen, auch Unterstützung von Firefox 2+ und Chrome 1+, Sie können spielen mit der
__defineSetter__
, um zu verhindern, dassonkeydown
wird definiert:run_at; "document _start"
, dann sollte es nicht möglich sein.document_start
?Dies ist, wie Sie es tun können mit jQuery
Entfernen Sie alle Verknüpfungen für jede Webseite: