如何关注QWebKit中的链接?

时间:2009-08-02 21:18:07

标签: qt dom qwebkit qwebpage qwebelement

拥有以下html的DOM;

<a href="?op=order">
<img class="img_button" src="picture.gif"
  onMouseOver="this.src='some.gif';"
  onMouseOut="this.src='some_other.gif';"
  alt="" border="0">
</a>

如何关注QWebKit中的链接(href)(特别是QWebPage)。

请注意,这是一张链接的图像 通过模拟鼠标点击我无法做到(我不想,即使我可以),因为我没有使用QWebView,因此我没有渲染页面。

3 个答案:

答案 0 :(得分:8)

假设您在名为“link”的变量中有链接的QWebElement(通过findFirst或其他任何位置):

  

link.evaluateJavaScript(“var evObj = document.createEvent('MouseEvents'); evObj.initEvent('click',true,true); this.dispatchEvent(evObj);”)

(这是在Python中,但它是重要的Javascript。是的,这是模拟鼠标点击,但由于它不使用坐标,它适用于未呈现的QWebPage。)

答案 1 :(得分:4)

在元素上使用DOM&#39; click() Java Script函数可以解决问题:

QWebPage * page = ...;
QWebElement el = page->mainFrame()->findFirstElement("a[href]");
el.evaluateJavaScript("this.click()"); 

答案 2 :(得分:2)

如果你有QWebView并且不关心滚动自动化,这可能会有所帮助:

const QWebElement &element=__your_element__;
QWebView *view =__your_view__;
QWebFrame *const frame=view->page()->mainFrame();
QPoint const elemPos=element.geometry().center();
frame->setScrollPosition(elemPos);
QPoint const scrollPos=frame->scrollPosition();

QMouseEvent * const impossibleMousePress = new QMouseEvent(QEvent::MouseButtonPress,elemPos-scrollPos,Qt::LeftButton,Qt::LeftButton,Qt::NoModifier);
QMouseEvent * const impossibleMouseRelease = new QMouseEvent(QEvent::MouseButtonRelease,elemPos-scrollPos,Qt::LeftButton,Qt::LeftButton,Qt::NoModifier);
QApplication::postEvent(view,impossibleMousePress);
QApplication::postEvent(view,impossibleMouseRelease);