【发布时间】:2011-07-28 07:21:45
【问题描述】:
我最近从事火狐扩展开发,遇到了一些问题:
所以,我在 browser.xul 中定义了以下几行:
<overlay id="sample" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script src="jquery.js" />
<script src="global.js" />
</overlay>
所以,在 global.js 中,我可以访问所有 jQuery 的东西,并尝试在那里加载一个简单的脚本:
var inner = null;
var o = function () {
var prefManager = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
return {
init : function () {
alert('here loading inner..');
$.get('http://www.example.com/script.js', function(d) {
alert('loaded inner script!');
inner = d;
gBrowser.addEventListener("load", function () {
alert('onload');
}, false);
}).error(function(e) { alert('error loading inner..'); setTimeout(o.init,1000); });
$(this).ajaxError(function() { alert('ajaxError'); });
}
}
}
window.addEventListener("load", o.init, false);
但我也没有收到“加载的内部脚本”,也没有收到“错误加载内部”警报。而且我没有看到错误控制台记录扩展程序中的任何错误...我假设 $.get 是可能由于某些限制而静默失败,但是是否有适当的方法可以正常调试错误?扩展程序的错误控制台是静默的,它只显示来自网页的错误
【问题讨论】:
-
Alex,我真的希望你实际上并没有评估 XHR 作为脚本获得的结果,对吧?
-
是的,但主要是因为插件是“可自动更新的” - 我知道这很糟糕,我在日常生活中从不这样做,但在这个特定的项目中,我不得不
-
关键是如果你这样做,那么你就会在浏览器中引入一个安全漏洞。例如,在不受信任的 wifi 连接上使用此类浏览器的任何人都允许 wifi 路由器将任意脚本注入 chrome。至少在这里使用 SSL!
-
我明白了,但这意味着即使来自 stackoverflow.com 的脚本也可以替换为任意脚本,因为它们也是在没有 ssl 的情况下加载的
-
是的,大概 stackoverflow.com 的维护者并不关心随机 wifi 操作员是否可以运行随机脚本冒充 stackoverflow... 甚至冒充整个站点。如果他们这样做了,他们将在 SSL 上运行他们的网站。
标签: javascript firefox firefox-addon xul