从XPCOM、C++调用Javascript函数

3
我的目标是在我的组件中捕获页面加载,将一些JavaScript插入到文档中,然后捕获onFocus事件。在事件上,我想调用我注入的JavaScript函数。
现在,我已经解决了大部分问题,我已经将脚本添加到所有网页中,并且我可以捕获onFocus事件。但我无法从我的XPCOM组件(C ++)执行JavaScript函数。在我的Internet Explorer BHO中,我使用execScript,它运行得很好。有什么建议吗?
目前,我的解决方法是使用setAttribute并将每个输入元素的onFocus事件设置为执行JavaScript函数,但这是具有侵入性的,并会覆盖网页中现有的onFocus处理程序。欢迎提出其他想法。
谢谢。
2个回答

1
如果你“已将脚本添加到所有网页”,那么脚本可以负责注册“焦点”事件监听器,并在焦点事件发生时采取适当的操作。
我不确定为什么你需要从组件中调用内容JS。
如果你确实需要这样做,请发布你已经尝试过的内容以及它“没有起作用”的方式。

0

我相信这曾经解决了你的问题(在Firefox 6之前?),现在正在寻找更新的解决方案。 Firefox 6对导航栏的安全性进行了一些更改,防止在那里执行JavaScript。https://support.mozilla.org/zh-CN/questions/876916

执行JavaScript的位置可能是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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接