2011-01-30 44 views
0

我是Firefox加载项TryAgain的开发者之一,它在网站加载失败时显示自定义错误页面。它本质上取代了Firefox的netError.xhtml自定义版本。创建XUL按钮会产生“组件失败代码”

为了将netError.xhtml内扩展代码执行JavaScript,我添加了一个XUL <command>元素的错误页面,如下所示:

var increment_btn = doc. 
    createElementNS(
     "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", 
     "xul:command" 
    ); 
increment_btn.setAttribute("id", "errorIncrement"); 
increment_btn.setAttribute("oncommand", "autoRetryThis();"); 
div.appendChild(increment_btn); 

每当要执行autoRetryThis()需求,我只需运行doCommand()元素上。在我的测试机器上,这在Firefox 2.0至4.0b10下正常工作。我收到了the following problem report,但是:

Error: Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIDOMHTMLDocument.createElementNS]

错误指向上述代码的第一行。

如果您想知道为什么我选择使用createElementNS()创建元素,请refer to my previous question

回答

0

使用XUL名称空间已被弃用。据我的理解,这意味着不再可能将XUL和XHTML控件放置在单个XML文档中。

我的解决办法,而不是使用普通的XHTML <button>标签,并调用它的onclick()听众通过调度事件:

try { 
    var evt = doc.createEvent('HTMLEvents'); 
    evt.initEvent('click', false, false); 
    btn.dispatchEvent(evt); 
} catch (e) { 
    btn.click(); 
} 

为什么不只是做btn.click()摆在首位?我发现在使用此方法和监视点击文档的加载项之间存在一些不兼容问题。直接调度事件可以避免这种情况。

1

从名称参数createElementNS中删除xul:

+0

我会尝试此操作并提交修改后的版本,但必须经过及时的编辑过程。你能详细说明为什么这会导致问题吗? – 2011-01-30 17:09:58