Javascript Firefox扩展:获取异常;访问属性的权限被拒绝href";用于在沙箱中运行的代码

Javascript Firefox扩展:获取异常;访问属性的权限被拒绝href";用于在沙箱中运行的代码,javascript,firefox,firefox-addon,Javascript,Firefox,Firefox Addon,我正在运行附加的代码作为我的firefox扩展。 当前,扩展所做的只是提醒浏览器当前所在页面(和iFrame)的当前位置。出于某种原因,在某些情况下,我在尝试通知该位置时会出现以下异常: 访问属性href的权限被拒绝 不幸的是,我无法理解代码工作的具体场景或页面以及引发异常的位置。 有人遇到过这个吗? 谢谢 以下是browser.xul文件内容(不带HTML标记): 该异常必须是由于跨源违规。是的,正如@paa所说,该异常必须是跨源违规。但是,由于长方体的主体是以一种方式设置的,即沙盒应该始终具

我正在运行附加的代码作为我的firefox扩展。 当前,扩展所做的只是提醒浏览器当前所在页面(和iFrame)的当前位置。出于某种原因,在某些情况下,我在尝试通知该位置时会出现以下异常:

访问属性href的权限被拒绝

不幸的是,我无法理解代码工作的具体场景或页面以及引发异常的位置。
有人遇到过这个吗? 谢谢

以下是browser.xul文件内容(不带HTML标记):


该异常必须是由于跨源违规。是的,正如@paa所说,该异常必须是跨源违规。但是,由于长方体的主体是以一种方式设置的,即沙盒应该始终具有其所评估的文档/窗口的相同主体(原点),因此这仍然很奇怪。您能否提供发生这种情况的选项卡的URI示例和/或发生这种情况的windows的URI示例(例如,直接从您的chrome代码中记录/alter doc.defaultView.location)?另外,你能详细介绍一下你最终想要达到的目标吗?正如@nmaier所说的,不应该有跨来源的违规行为,这才是真正的谜团。扩展的总体思路是,我阅读动态计算的代码(我发布的代码片段中没有显示),在代码中,我希望在执行某些操作之前检查当前位置。由于这是我从用户那里得到的一个错误,不幸的是,我没有特定的URI,这会发生在用户身上。我想知道你对如何找到可能导致此异常的场景有何想法,以便我可以重新创建它并进行调试。如果我必须猜测(而且你似乎希望我这么做),我会打赌非标准主体,例如about:甚至chrome:?,或webapp主体。另外,我还记得你不应该在沙箱上设置
\uuuu proto\uuuu
:PS:设置
sb.window
应该没有必要(甚至可能是个问题)。
sandboxPrototype
window.window==window
这一事实已经暗示了这一点。同样适用于
sb.文档
setTimeout(function() {
        var appcontent = document.getElementById("appcontent");
        if (appcontent) {
                appcontent.addEventListener("DOMContentLoaded", function (aEvent) {
                var doc = aEvent.originalTarget;
                if (!(doc instanceof HTMLDocument)) {
                    // Validation.
                    return;
                }

                var sandbox = new Components.utils.Sandbox(doc.defaultView, {
                    'sandboxPrototype': doc.defaultView,
                    'wantXrays': true
                });

                sandbox.window = doc.defaultView;
                sandbox.document = doc.defaultView.document;            
                sandbox.__proto__ = doc.defaultView;
                sandbox.unsafeWindow = doc.defaultView.wrappedJSObject;
                var strCode = "try { alert(window.location.href); } catch(e1) {alert(e1.message);}";
                Components.utils.evalInSandbox(strCode, sandbox, "1.8");
            }, true);
        }
    }, 1000);