2016-12-11 2 views
1

konnte ich die folgende Grease in lokale HTML-Datei auszuführen:Wie führe ich eine Javascript-Datei über Protokolle/Schemata aus?

// ==UserScript== 
// @name  test 
// @include  file:///C:/fx/test/a.html 
// @grant  none 
// ==/UserScript== 

var scriptElement = document.createElement("script"); 
scriptElement.type = "text/javascript"; 
scriptElement.src = "file://c:/fx/alert.js"; 
document.head.appendChild(scriptElement); 

ich in der Lage war, die folgenden in localhost ausführen:

// ==UserScript== 
// @name  testWeb 
// @include  http://localhost/test/a.html 
// @grant  none 
// ==/UserScript== 

var scriptElement = document.createElement("script"); 
scriptElement.type = "text/javascript"; 
scriptElement.src = "http://localhost/test/alert.js"; 
document.head.appendChild(scriptElement); 

Allerdings war ich folgendes ausführen nicht in der Lage. Es gibt eine HTML-Datei im Webserver und eine Skriptdatei im lokalen Laufwerk. config:

// ==UserScript== 
// @name  testWeb 
// @include  http://localhost/test/a.html 
// @grant  none 
// ==/UserScript== 

var scriptElement = document.createElement("script"); 
scriptElement.type = "text/javascript"; 
scriptElement.src = "file://c:/fx/alert.js"; 
document.head.appendChild(scriptElement); 

greasemonkey.fileIsGreaseable wurde in etwa auf true gesetzt.
Was soll ich tun, um eine lokale Skriptdatei im Skript-Tag auszuführen?

+0

Was passiert, wenn Sie '// @include file: /// C:/fx/test/a.html' zu Ihrer letzten Probe hinzufügen? – LGSon

+0

Sie versuchen, domänenübergreifend auf das Dateisystem zuzugreifen. In den meisten Browsern ist das nicht erlaubt. – Bindrid

+0

'fileIsGreaseable' bedeutet nur, dass greasemonkey Ihre Skripte auch dann ausführt, wenn Sie eine 'file: //' URL im Browser aufrufen (normalerweise fängt sie nur' http: // 'und' https: // ') ab. – melpomene

Antwort

0

Es ist ein grundlegender Sicherheitsfehler, Ressourcen über Protokolle hinweg zu laden. Stellen Sie sich das unsägliche Böse vor, das eine bösartige Website (oder eine Drittanbieter-Anzeige) tun könnte (und hätte), wenn sie nur file:// Ressourcen laden könnte.

Aus diesem Grund wird der Browser solche Versuche über Protokolle blockieren mit Meldungen wie:

Security Error: Content at http://evil.com/pwner.htm may not load or link to file:///C:/user_passwords.db

(Firefox)


Sie bereits wissen, was Sie zu tun haben:

  • Wenn das Skript für eine Protokollseite file:// ausgeführt wird, greifen Sie mit der file:// auf Ihre Ressource zu Protokoll.
  • Wenn das Skript mit einer Protokollseite http(s) ausgeführt wird, greifen Sie mit dem Protokoll http(s) auf Ihre Ressource zu.
Verwandte Themen