如何跨协议/方案执行javascript文件?

时间:2016-12-11 07:24:14

标签: javascript greasemonkey

我能够在本地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 如何在脚本标记中执行本地脚本文件?

1 个答案:

答案 0 :(得分:1)

尝试跨这样的协议加载资源是一个基本的安全错误。试着想象一个恶意网站(或其第三方广告)如果能够加载file://资源就可以(而且确实)做出来的无法形容的邪恶。

出于这个原因,浏览器将使用以下消息阻止此类跨协议的尝试:

  

安全错误:http://evil.com/pwner.htm处的内容可能无法加载或链接到file:/// C:/user_passwords.db

(Firefox)的

您已经知道自己需要做什么:

  • 当脚本针对file://协议页面运行时,使用file://协议访问您的资源。
  • 当脚本针对http(s)协议页面运行时,使用http(s)协议访问您的资源。