Greasemonkey - 图像没有显示

时间:2011-03-09 18:07:01

标签: javascript css greasemonkey background-image

在Greasemonkey中,我正在尝试使用在线找到的图像的本地副本。图像暂时存储在C:\ temp。

这不起作用:

var b = document.body;
b.style.background = '#ccc url("file:///C:/temp/bg.jpg") repeat-x top left';

在Firebug中,我可以将鼠标悬停在样式窗口中的路径上并弹出图像,显示图像在那里并且路径正确,但Firefox只是没有显示它。我甚至尝试重新绘制页面:

  setTimeout(function(){element.className = element.className;},500);

如果我使用原始http url(http://somedomain/bg.jpg)的路径,它将起作用,但试图避免这种情况。我不确定为什么渲染本地图像时出现问题。

5 个答案:

答案 0 :(得分:8)

Greasemonkey提供了一种方法来实现这一目标,并且不会损害您PC的安全性(请重新开启安全检查,有大量网站等待利用这些漏洞)。

这是一种方法:

  1. 为获得最佳效果,请使用Greasemonkey用户脚本管理器( Ctrl Shift A )卸载旧版本的脚本,如果有的话。

  2. 将所需图片复制到包含脚本的任何文件夹, profile directory中已安装的脚本。

    例如,如果您的脚本来源位于C:\myScripts\,请将bg.jpg复制到该文件夹​​。不要将temp文件夹用于脚本源。

  3. 将这些行添加到脚本的元数据部分:

    // @resource MyBG_Image bg.jpg
    // @grant    GM_getResourceURL
    
  4. 然后您可以在脚本中使用此代码:

    var b = document.body;
    b.style.background = '#ccc url("' + GM_getResourceURL ("MyBG_Image") + '") repeat-x top left';
    
  5. 现在通过使用Firefox打开文件来安装脚本,例如,在FF中使用文件 - > 打开文件菜单(或按Ctrl O )打开C:\myScripts\MyScript.user.js
    Greasemonkey将提示(重新)安装脚本,然后本地文件bg将起作用。

答案 1 :(得分:2)

这是因为您无法从本地文件(file://)以外的其他域添加对本地文件的引用。

错误控制台中显示安全错误消息。 (以防万一你以前没见过)

请阅读Same-origin policy for file: URIs了解详情。

答案 2 :(得分:1)

Brock Adams是绝对正确的。必须(重新)安装脚本,如他所描述的那样。

将此添加到元数据:

    // @resource MyTest_Image animated_gif_test.gif

这个脚本让GM在lacal机器上使用图像

    //images[x].src  = GM_getResourceURL ("MyTest_Image");

此处有关此方法的更多信息:http://wiki.greasespot.net/GM_getResourceURL

    // ==UserScript==
    // @resource logo http://www.example.com/logo.png
    // ==/UserScript==

    var img = document.createElement('img');
    img.src = GM_getResourceURL("logo");
    document.body.appendChild(img);

答案 3 :(得分:1)

在我添加以下内容之前,我无法让这个工作......

// @grant       GM_getResourceURL

答案 4 :(得分:0)

来自:http://www-archive.mozilla.org/releases/mozilla1.7.12/known-issues.html

  
    
      

出于安全原因,Mozilla不允许Web内容链接到本地​​文件。如下错误:安全错误:网址上的内容可能无法加载或链接到文件:///某些内容将出现在javascript控制台中。如果您需要关注本地路径的链接,建议您将链接拖到位置栏,然后将其拖放到网页上。如果您真的不喜欢安全检查,并且愿意冒险系统中的所有文件并且您的系统可以访问,那么您可以将以下行添加到您的个人profile directory中的user.js。 user_pref(“security.checkloaduri”,false); (Bug 84128