QWebView 与Js 交互
我本愚钝,在网上搜了一下没找到可以运行的栗子,遂在这记录一下吧。
环境:win10 64位系统 qt 4.8.7 (mingw32) qtcreator(4.5.0)
1. 建立一个 Widgets Application 项目,修改 *.pro 文件 ,增加 QT += core gui webkit
#
#------------------------------------------------- QT += core gui webkit greaterThan(QT_MAJOR_VERSION, ): QT += widgets TARGET = testweb
TEMPLATE = app # The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS # You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0. SOURCES += \
main.cpp \
mytestwindow.cpp HEADERS += \
mytestwindow.h FORMS += \
mytestwindow.ui
在 mytestwindow.h 增加
public slots:
void loadFinished();
void onCall(QString name);
附 mytestwindow.h 全部文件
#ifndef MYTESTWINDOW_H
#define MYTESTWINDOW_H #include <QMainWindow> namespace Ui {
class MyTestWindow;
} class MyTestWindow : public QMainWindow
{
Q_OBJECT public:
explicit MyTestWindow(QWidget *parent = );
~MyTestWindow(); public slots:
void loadFinished();
void onCall(QString name); private:
Ui::MyTestWindow *ui;
}; #endif // MYTESTWINDOW_H
附 mytestwindow.cpp 全部文件
#include "mytestwindow.h"
#include "ui_mytestwindow.h"
#include <QWebView>
#include <QWebFrame>
#include <QDebug> MyTestWindow::MyTestWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MyTestWindow)
{
ui->setupUi(this); QWebView *view = new QWebView(this->centralWidget());
view->load(QUrl::fromUserInput(QString("D:\\Qt\\projects\\web\\testweb\\test.html")));
connect(view, SIGNAL(loadFinished(bool)), this, SLOT(loadFinished())); view->page()->mainFrame()->addToJavaScriptWindowObject("mytestwin",this);
} MyTestWindow::~MyTestWindow()
{
delete ui;
} void MyTestWindow::loadFinished()
{
QVariant f1result = ((QWebView*)sender())->page()->mainFrame()->evaluateJavaScript("f1('test param ha ha ha ~~')");
qDebug() << f1result.toString();
} void MyTestWindow::onCall(QString name)
{
qDebug()<<name;
}
附 test.html 文件
<head>
<script LANGUAGE="JavaScript">
function f1 (s)
{
alert (s)
window.mytestwin.onCall("test on call");
return "f1 result ha ha ha ~~"
}
</script>
</head>
<body>
test html
</body>
运行结果如下:

2018-2-9 ps:
问题1: 加载 https 具有ssl的网站异常。
解决1:需要 mingw32\opt\bin 目录下libeay32.dll和ssleay32.dll (qt对应mingw32) 复制 到项目的debug/release 目录以下即可。
QWebView 与Js 交互的更多相关文章
- 关于JS交互--调用h5页面,点击页面的按钮,分享到微信朋友圈,好友
关于js交互,在iOS中自然就想到了调用代理方法 另外就是下面的,直接上代码了: 如果你的后台需要知道你的分享结果,那么,就在回调里面调用上传到服务器结果的请求即可
- webView和js交互
与 js 交互 OC 调用 JS // 执行 js - (void)webViewDidFinishLoad:(UIWebView *)webView { NSString *title = [web ...
- 李洪强iOS经典面试题147-WebView与JS交互
李洪强iOS经典面试题147-WebView与JS交互 WebView与JS交互 iOS中调用HTML 1. 加载网页 NSURL *url = [[NSBundle mainBundle] UR ...
- WebView---Android与js交互实例
Android 中可以通过webview来实现和js的交互,在程序中调用js代码,只需要将webview控件的支持js的属性设置为true 原文地址:http://blog.csdn.net/it10 ...
- iOS与JS交互实战篇(ObjC版)
前言 ObjectiveC与Js交互是常见的需求,可对于新手或者所谓的高手而言,其实并不是那么简单明了.这里只介绍iOS7.0后出来的JavaScriptCore framework. 关于JavaS ...
- Android WebView加载本地html并实现Java与JS交互
最近做的一个项目中,用到自定义地图,将自定义地图转换成html页面,现在需要做的是如何将本地的html加载到android中,并可以实现交互. 相关讲解: 其实webview加载资源的速度并不慢,但是 ...
- WinForm程序执行JS代码的多种方法以及使用WebBrowser与JS交互
方法一 使用微软官方组件Interop.MSScriptControl 1.msscript.ocx下载的地址 http://www.microsoft.com/downloads/details ...
- WKWebView新特性及JS交互
引言 一直听说WKWebView比UIWebView强大许多,可是一直没有使用到,今天花了点时间看写了个例子,对其API的使用有所了解,为了日后能少走弯路,也为了让大家更容易学习上手,这里写下这篇文章 ...
- 【转】第7篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:全自动注册与反射方法分析
作者: 牛A与牛C之间 时间: 2013-12-12 分类: 技术文章 | 2条评论 | 编辑文章 主页 » 技术文章 » 第7篇:Xilium CefGlue 关于 CLR Object 与 JS ...
随机推荐
- python链接安卓 跳一跳
借鉴: 一百行代码实现微信跳一跳 之前需要安装adb 开启服务: adb nodaemon server 显示设备: adb devices 代码: import math import os im ...
- jquery mobile开发中常见的问题(转载)
1页面缩放显示问题 问题描述: 页面似乎被缩小了,屏幕太宽了. 处理方法: 在head标签内加入: <meta name="viewport" content="w ...
- C++实现线性表的链接存储结构(单链表)
将线性表的抽象数据类型定义在链接存储结构下用C++的类实现,由于线性表的数据元素类型不确定,所以采用模板机制. 头文件linklist.h #pragma once #include <iost ...
- impala安装笔记(Ubuntu)
1.Override 1.With Impala, you can query data, whether stored in HDFS or Apache HBase – including SEL ...
- DOS 保存系统日志
1.导出系统日志,以当前日期命名 @echo offset nowDate=%date%set tmp=%nowDate:~0,-3%set file=%tmp:/=-%系统日志.evtx echo ...
- Vim中增加ga键的vmap功能
ga是Vim自带的显示光标字符编码的功能,但是反过来,没有从编码显示对应字符的功能. 因为编码是多位数,所以可视模式下写了此功能. 规则: 纯数字认为是10进制 其他情况都认为是16进制 纯数字的话, ...
- Android中跑马灯效果
<com.randy.test1.self.MarqueeText android:id="@+id/btn1" android:layout_width="mat ...
- HDU 3292 【佩尔方程求解 && 矩阵快速幂】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=3292 No more tricks, Mr Nanguo Time Limit: 3000/1000 M ...
- HDU 2588 GCD 【Euler + 暴力技巧】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=2588 GCD Time Limit: 2000/1000 MS (Java/Others) Mem ...
- Kali-linux测试网络范围
测试网络范围内的IP地址或域名也是渗透测试的一个重要部分.通过测试网络范围内的IP地址或域名,确定是否有人入侵自己的网络中并损害系统.不少单位选择仅对局部IP基础架构进行渗透测试,但从现在的安全形势来 ...