【问题标题】:Qt4: How to call JavaScript functions in a page from C++ via QtWebkit?Qt4:如何通过 QtWebkit 从 C++ 调用页面中的 JavaScript 函数?
【发布时间】:2010-11-27 10:16:10
【问题描述】:

我正在尝试使用 Qt4 的 WebKit 端口/实现编写一个简单的日志查看器。我的 HTML 代码如下所示:

http://pastie.org/613296

更具体地说,我试图找出如何从我的 C++ 代码中调用 HTML 文档的 <script> 部分中定义的 add_message() 函数。


// Doesn't work:
QWebElement targetElement = chatView->page()->mainFrame()->findFirstElement("head").firstChild("script");

// Function is not included, either...
qDebug() << targetElement.tagName() << targetElement.functions();

// The ultimate attempt in calling the function anyway:
QVariant functionResult = targetElement.callFunction("add_message");

【问题讨论】:

    标签: javascript qt4 webkit call qtwebkit


    【解决方案1】:

    如果您使用的是 Qt 4.5,请执行以下操作:

    htmlView->page()->mainFrame()->evaluateJavaScript("add_message(); null");
    

    注意:脚本末尾的null 用于性能问题。 QWebFrame::evaluateJavaScript 返回 QVariant 和脚本中的最后一个值。评估脚本中的最后一个值可能非常耗时,因此将 null 放在末尾会使其立即返回。

    【讨论】:

    • 谢谢,我回家后马上试试。尽管看起来我必须转义参数才能在 evaluateJavaScript() 调用中将它们用作文字。这不是很危险吗?
    • 是的,你必须转义参数,因为 JavaScript 会产生错误。它不应该是危险的,因为你只为 JavaScript 解析器转义它,在 webkit 的内部它会显示为与未转义参数相同
    猜你喜欢
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多