所以,我正在开发一个基于页面mod和iframe的firefox插件。内容脚本中使用iframe的chrome版本运行正常。
所以基本上,我注入了一个按钮,当按下按钮时,他改变了包含一些窗口内容的div的显示类型(在浏览器中创建一个可移动的窗口和一个关闭按钮),这个窗口包含一个iframe。 iframe包含完全包含在插件包中的应用程序,只需对服务器进行少量ajax调用即可刷新本地存储数据。
我可以注入打开按钮,窗口化内容和iframe,但每当我放入iframe时,内容都没有加载。 (在一个案例中除外,但不是我想要的)。
基本上设置iframe的内容:
以下是页面中注入的内容:
<div id="iframeContainer" style="border: medium none; width: 550px; height: 600px; background…olute; top: 50px; right: 10px; z-index: 200; display: block;">
<iframe id="master" frameborder="0" scrolling="no" src="resource://jid1-83zazep6ncytaa-at-jetpack/myaddon/data/index.html" style="border:none; width:550px; height:600px; background-color: transparent; position:absolute; z-index: 100; cursor:default;">
#document
<html>
<head></head>
<body></body>
</html>
</iframe>
<div id="clsBtn" style="border:none; width:25px; height:25px; position:absolute; top: 8px; right: 20px; z-index: 301;">
<div id="closeShadow" style="width: 0px; height: 0px; box-shadow: 12px 12px 8px 8px rgb(255, 255, 128); z-index: 302; display: none;"></div>
<img src="resource://jid1-83zazep6ncytaa-at-jetpack/myaddon/data/images/cross.png" style="border:none; width:25px; height:25px; position:absolute; z-index: 303; cursor:pointer;" title="Close"></img>
</div>
</div>
<div id="openBtn" style="border:none; width:50px; height:50px; position:absolute; bottom: 5px; right: 10px; z-index: 301;">
<div id="openShadow" style="width: 0px; height: 0px; box-shadow: 25px 25px 25px 15px rgb(255, 255, 255); z-index: 302; display: none;"></div>
<img src="resource://jid1-83zazep6ncytaa-at-jetpack/myaddon/data/images/icon.png" style="border:none; width:50px; height:50px; position:absolute; z-index: 303; cursor:pointer;" title="Open TSO trade"></img>
</div>
<div id="headerDiv" style="border: medium none; width: 480px; height: 23px; position: a…peat scroll 0% 0% transparent; cursor: move; display: block;"></div>
如果我浏览资源://jid1-83zazep6ncytaa-at-jetpack/myaddon/data/index.html我会正确呈现页面(css和js functionnal)。 此外,两个按钮和标题也正确显示(图像,样式和相关的js)。所以它真的在没有加载和渲染的iframe上。
在控制台中,我没有收到任何js错误或安全错误。
如果我用谷歌替换iframe内容(并在谷歌上注入),iframe也不会渲染。
你有什么想法吗?
PS:有一种方法可行但不是我想要的。我发现的方法的问题是javascript没有运行,我仍然有一些样式问题。所以不是我认为的方式。
// Load the document
var source = data.load("index.html");
// Replace the relative path with the packed paths
source = source.replace("css/style.css", data.url("css/style.css"));
source = source.replace("css/ico.css", data.url("css/ico.css"));
source = source.replace("css/jquery-ui.css", data.url("css/jquery-ui.css"));
source = source.replace("js/external/jquery-1.9.1.js", data.url("js/external/jquery-1.9.1.js"));
source = source.replace("js/external/jquery-numeric.js", data.url("js/external/jquery-numeric.js"));
source = source.replace("js/external/jquery-ui.js", data.url("js/external/jquery-ui.js"));
source = source.replace("js/trade/data.js", data.url("js/trade/data.js"));
source = source.replace("js/trade/main.js", data.url("js/trade/main.js"));
console.log(source);
// Encode the content
let content = encodeURIComponent(source);
let binarySource = "data:text/html;charset=utf-8," + content;
// When in the injector, set the "binary source" as content
iframe.contentWindow.location.href=iframeSource;