我能够在本地HTML文件中执行以下Greasemonkey:
// ==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 );
我能够在localhost中执行以下命令:
// ==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 );
但是,我无法执行以下操作。 Web服务器中有HTML文件,本地驱动器中有脚本文件。
// ==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
在about:config中设置为true
如何在脚本标记中执行本地脚本文件?
答案 0 :(得分:1)
尝试跨这样的协议加载资源是一个基本的安全错误。试着想象一个恶意网站(或其第三方广告)如果能够加载file://
资源就可以(而且确实)做出来的无法形容的邪恶。
出于这个原因,浏览器将使用以下消息阻止此类跨协议的尝试:
安全错误:
http://evil.com/pwner.htm
处的内容可能无法加载或链接到file:/// C:/user_passwords.db
(Firefox)的
您已经知道自己需要做什么:
file://
协议页面运行时,使用file://
协议访问您的资源。http(s)
协议页面运行时,使用http(s)
协议访问您的资源。