从XPCOM,C ++调用Javascript函数

时间:2009-11-10 08:41:37

标签: javascript firefox-addon

我的目标是捕获组件中的页面加载,将一些javascript插入到文档中,然后捕获onFocus事件。在一个事件上,我想调用我注入的javascript函数。

现在我设法解决了大多数问题,我已将脚本添加到所有网页中,我可以捕获onfocus事件。我无法做的是从我的XPCOM组件(C ++)执行javascript函数。在我的Internet Explorer BHO中,我使用execScript,效果很好。有什么想法吗?

目前我的解决方法是使用setattribute并设置每个输入元素的onfocus事件来执行javascript函数,但这是侵入性的并覆盖网页中现有的onFocus处理程序。欢迎其他想法。

感谢。

2 个答案:

答案 0 :(得分:1)

如果您“将脚本添加到所有网页”,则脚本可以注册注册“焦点”事件侦听器并在焦点事件发生时采取适当的操作。

我不确定你为什么需要调用组件中的内容JS。

如果您确实需要这样做,请发布您已经尝试过的内容以及“不起作用”的方式。

答案 1 :(得分:0)

我相信这用来解决你的问题(前FF6?),我正在寻找一个更新的解决方案。 FF6对导航栏的安全性进行了一些更改,导致无法在那里执行javascript。 https://support.mozilla.org/en-US/questions/876916

在哪里执行java脚本,网址可能是javascript:alert('hello');

OnStateChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, PRUint32 aStateFlags, nsresult aStatus) {
  // check for correct state - document load complete...
  nsCOMPtr<nsIDOMWindow> domWin;
  nsresult rv = aWebProgress->GetDOMWindow(getter_AddRefs(domWin));

  nsCOMPtr<nsIWebNavigation> nav = do_GetInterface(domWin);
  if (nav)
    hr = nav->LoadURI(url, 0, 0, 0, 0);