2009-11-10 77 views
3

我的目标是在我的组件中捕获页面加载,在文档中插入一些javascript,然后捕获onFocus事件。在一个事件我然后要调用我注入的JavaScript函数。从XPCOM调用Javascript函数,C++

现在我设法解决大多数问题,我已将脚本添加到所有网页,并且可以捕获焦点事件。我不能做的是从我的XPCOM组件(C++)执行一个JavaScript函数。在我的Internet Explorer BHO中,我使用了execScript,它效果很好。有任何想法吗?

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

谢谢。

回答

1

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

我不知道为什么你需要从你的组件调用内容JS。

如果您确实需要这样做,请发布您已经尝试过的方式以及以何种方式“无法使用”。

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);