【问题标题】:In QT 4.6 w/ Webkit: How to handle popup window requests (WebView::createWindow)?在带有 Webkit 的 QT 4.6 中:如何处理弹出窗口请求 (WebView::createWindow)?
【发布时间】:2010-05-02 22:10:31
【问题描述】:

我是 QT 新手,一直在尝试创建一个测试浏览器。我现在要做的是处理基于 js 的弹出请求。在阅读了 QT 文档后,我了解到我需要重新实现 QWebView::createWindow 方法才能做到这一点。

现在我重新实现了这个方法,但是当我尝试点击触发弹出窗口的链接时,它似乎没有被调用。

谁能帮帮我?我是否需要同时继承 WebView 和 WebPage 类?如果是这样,我该怎么做?我对 QT 很陌生,我进行了大量搜索,但一无所获。

提前感谢大家的任何提示和建议!

【问题讨论】:

    标签: qt4 popup webkit


    【解决方案1】:

    您记得设置以下选项吗?

    view->settings()->setAttribute(QWebSettings::JavascriptEnabled, true);
    view->settings()->setAttribute(QWebSettings::JavascriptCanOpenWindows, true);
    

    并且不要忘记调用父类的 createWindow() 方法。该文档对此有注释:

    注意:如果 createWindow() 方法的 关联的页面被重新实现, 这个方法不会被调用,除非 在 重新实现。

    【讨论】:

    • @duncan,非常感谢您的帮助!我很确定 JavaScript 已启用,因为所有其他 js 调用都运行良好。我尝试使用 setAttribute 调用来启用 JavascriptCanOpenWindows,但是我遇到此错误消息:没有匹配函数调用 QWidget::setAttribute... 我正在使用此代码:myWebView->page()->view()- >setAttribute(QWebSettings::JavascriptCanOpenWindows, true);这是不正确的吗?我相信这是一个非常菜鸟的问题,再次感谢您的任何见解!
    【解决方案2】:

    别在意我的第二个问题(在评论区),这是我为捕获新窗口请求所做的工作(非常感谢 Duncan 的提示!):

    page()->settings()->setAttribute(QWebSettings::JavascriptCanOpenWindows, true);
    

    这是在自定义 WebView 类的启动过程中使用的。

    希望这对某人有用。 谢谢!

    【讨论】:

      猜你喜欢
      • 2018-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多