qt5.14配webkit引擎,无法弹出窗口,求助!

牧牛童子 2020-09-20 04:22:47
使用 qtwebview 可以正常打开http 和 https 网页。
但是我家的无线路由器,首页开始就弹出登陆窗口(是弹出的,不是内嵌的登陆框),无法弹出。
不知道如何处理,哪位大侠有经验,指导一下,谢谢。
...全文
11939 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
牧牛童子 2020-11-13
  • 打赏
  • 举报
回复
引用 13 楼 mideum 的回复:
天啦,我终于等到有别人回复这贴了,之前因为要修改,发了删,删了发好几次,结果不让我再回复了 回到原来的问题,我之前理解的弹出框好像不对,后来终于有点理解了,就是一个只有用户名和密码的框对吗,类似这种: 这个框是需要自己来显示的,webkit本身不提供,可以参考官方自带的例子: https://github.com/qt/qtwebkit/blob/dev/Tools/QtTestBrowser/webpage.cpp 需要连接QWebPage::networkAccessManager()的authenticationRequired()信号

    connect(networkAccessManager(), SIGNAL(authenticationRequired(QNetworkReply*, QAuthenticator*)),
            this, SLOT(authenticationRequired(QNetworkReply*, QAuthenticator*)));
在后面实现authenticationRequired的部分可以看到,要自己创建一个用户名密码对话框来让用户输入
这个方法,我用过,可能是用法不对? 谢谢,我测试完了,来回复测试结果。
mideum 2020-11-12
  • 打赏
  • 举报
回复
天啦,我终于等到有别人回复这贴了,之前因为要修改,发了删,删了发好几次,结果不让我再回复了

回到原来的问题,我之前理解的弹出框好像不对,后来终于有点理解了,就是一个只有用户名和密码的框对吗,类似这种:

这个框是需要自己来显示的,webkit本身不提供,可以参考官方自带的例子:
https://github.com/qt/qtwebkit/blob/dev/Tools/QtTestBrowser/webpage.cpp
需要连接QWebPage::networkAccessManager()的authenticationRequired()信号

connect(networkAccessManager(), SIGNAL(authenticationRequired(QNetworkReply*, QAuthenticator*)),
this, SLOT(authenticationRequired(QNetworkReply*, QAuthenticator*)));

在后面实现authenticationRequired的部分可以看到,要自己创建一个用户名密码对话框来让用户输入
  • 打赏
  • 举报
回复
话说回来,Qt5自从转到webEngine后,就把MingW编译器排除在外了。不过,好在VC编译器也是免费的。
mideum 2020-09-25
  • 打赏
  • 举报
回复
引用 6 楼 牧牛童子 的回复:
重写新类继承QWebView并重写createWindow方法了,已经实现了可以 “右键在新窗口中打开链接”。但是 路由器的登陆 弹出窗口,还是弹不出来……

你得自己先判断一下你路由器弹出窗口的原理是什么,才能知道下一步是啥
如果是像我说的javascript调用了window.open(),你修改QWebSettings的设置了吗
牧牛童子 2020-09-25
  • 打赏
  • 举报
回复
引用 7 楼 mideum 的回复:
你得自己先判断一下你路由器弹出窗口的原理是什么,才能知道下一步是啥 如果是像我说的javascript调用了window.open(),你修改QWebSettings的设置了吗
java\javascript,都允许了。 webview01->settings()->setAttribute(QWebSettings::JavascriptEnabled,true); webview01->settings()->setAttribute( QWebSettings::JavascriptCanOpenWindows,true); webview01->settings()->setAttribute( QWebSettings::JavascriptCanAccessClipboard,true); webview01->settings()->setAttribute( QWebSettings::JavascriptCanCloseWindows,true); webview01->settings()->setAttribute( QWebSettings::JavascriptCanOpenWindows,true); webview01->settings()->setAttribute( QWebSettings::PluginsEnabled,true); webview01->settings()->setAttribute( QWebSettings::JavaEnabled,true); webview01->settings()->setAttribute( QWebSettings::JavascriptEnabled,true); webview01->settings()->setAttribute( QWebSettings::AutoLoadImages,true); webview01->setAttribute(Qt::WA_DeleteOnClose, true);
牧牛童子 2020-09-25
  • 打赏
  • 举报
回复
引用 1 楼 mideum 的回复:
好多年没有用webkit了,用仅剩的印象回复你一下 你这个我判断应该是遇到javascript调用了window.open()之类的方法打开新窗口 我不知道你是用的c++还是qml,我只用过c++的 这边关键是QWebView::createWindow这个方法 从文档里可以看到,如果要支持从js里打开新窗口,还必须将QWebSettings::JavascriptCanOpenWindows设置成enable 然后需要继承QWebView并重写createWindow方法,返回一个QWebView *用来传递给js
重写新类继承QWebView并重写createWindow方法了,已经实现了可以 “右键在新窗口中打开链接”。但是 路由器的登陆 弹出窗口,还是弹不出来……
牧牛童子 2020-09-24
  • 打赏
  • 举报
回复
引用 4 楼 feiyangqingyun 的回复:
你可以试试你本地的网页浏览器打开看下有没有这个问题
用电脑浏览打开,可以弹出登陆窗口。
feiyangqingyun 2020-09-24
  • 打赏
  • 举报
回复
你可以试试你本地的网页浏览器打开看下有没有这个问题
牧牛童子 2020-09-21
  • 打赏
  • 举报
回复
谢谢各位,我用的是C++写的。 我根据你们的思路再测试一下。
tianfang 2020-09-21
  • 打赏
  • 举报
回复
弹出的应该是http 基本认证,Basic Authentication 参考: https://juejin.im/entry/6844903586405564430 在打开路由器页面,增加headers信息传递认证信息
mideum 2020-09-21
  • 打赏
  • 举报
回复
好多年没有用webkit了,用仅剩的印象回复你一下
你这个我判断应该是遇到javascript调用了window.open()之类的方法打开新窗口
我不知道你是用的c++还是qml,我只用过c++的
这边关键是QWebView::createWindow这个方法
从文档里可以看到,如果要支持从js里打开新窗口,还必须将QWebSettings::JavascriptCanOpenWindows设置成enable
然后需要继承QWebView并重写createWindow方法,返回一个QWebView *用来传递给js

16,817

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧