webview.h

#ifndef WEBVIEW_H
#define WEBVIEW_H

#include <QIcon>
#include <QWebEngineView>

class WebPage;

class WebView : public QWebEngineView
{
    Q_OBJECT

public:
    WebView(QWidget *parent = nullptr);
    void setPage(WebPage *page);

    QIcon icon() const;
    int loadProgress() const;
    bool isWebActionEnabled(QWebEnginePage::WebAction webAction) const;
    static QNetworkAccessManager &networkAccessManager();

protected:
    void contextMenuEvent(QContextMenuEvent *event) override;
    QWebEngineView *createWindow(QWebEnginePage::WebWindowType type) override;

signals:
    void iconChanged(const QIcon &icon);
    void webActionEnabledChanged(QWebEnginePage::WebAction webAction, bool enabled);

private slots:
    void handleIconUrlChanged(const QUrl &url);
    void handleIconLoaded();

private:
    void createWebActionTrigger(QWebEnginePage *page, QWebEnginePage::WebAction);

private:
    int m_loadProgress;
    QIcon m_icon;
};

#endif
<think> 首先,用户的问题是基于提供的引用内容:他想了解H5页面如何获取通过WebView的`evaluateJavascript`方法传递的参数。引用中讨论了Android和iOS中使用`evaluateJavascript`来调用JavaScript方法并传递参数。 回顾引用内容: - 引用[1]:Android中使用`webview.evaluateJavascript`调用JS方法,并可以获取返回值。 - 引用[2]:提到在H5页面中调用Android接口,如`Android.sendData(str)`,以及接收复杂数据通过JSON解析。 - 引用[3]:讨论了JsBridge的实现,在Android高版本中使用`evaluateJavascript`。 - 引用[4]:Flutter中与H5交互,使用`controller.evaluateJavascript`调用JS方法。 - 引用[5]:iOS中通过`evaluateJavaScript`调用H5方法,传递JSON参数。 用户的具体问题是:“我想查找h5页面获取webview.evaluatejavascript传递参数的方法 请问h5页面如何获取webview.evaluatejavascript传递的参数” 关键点:H5页面如何接收从Native(Android或iOS)通过`evaluateJavascript`传递的参数。 从引用中提取相关信息: - 在`evaluateJavascript`调用中,Native端会执行JavaScript代码字符串,通常调用H5中定义的函数并传递参数。 - 例如,在引用[1]中:`webview.evaluateJavascript("javascript:方法名(参数)", callback)` - 在引用[2]中:H5页面定义函数来接收数据,如`function sendData(str) { ... }`,然后Native调用这个函数。 - 在引用[5]中:iOS端构建JS字符串如`webOnLogin(param)`,其中`param`是一个JSON字符串。 所以,H5页面获取参数的方式是: 1. 在H5页面中定义一个JavaScript函数。 2. Native端通过`evaluateJavascript`调用这个函数,并将参数作为函数调用的输入。 3. H5页面在该函数中接收参数并进行处理。 例如: - Native端(Android或iOS)执行:`evaluateJavascript("myFunction('hello')", callback)` - 在H5页面的JavaScript中,定义了`function myFunction(param) { console.log(param); }`,这样H5就能获取到参数`'hello'`。 对于复杂数据: - 通常通过JSON传递。Native端将对象序列化为JSON字符串,然后在JS中调用函数传递这个字符串。 - H5页面在函数中解析JSON字符串。 如引用[5]所示:iOS端`[NSString stringWithFormat:@"webOnLogin(%@)",param]`,其中`param`是JSON字符串。H5页面定义`function webOnLogin(data) { var obj = JSON.parse(data); ... }` 类似地,在Android中,如引用[2]提到:`var deviceInfo = JSON.parse(window.android.getDeviceInfo());`,但`getDeviceInfo`可能是Android注入的接口;对于`evaluateJavascript`,直接调用函数传递参数。 核心是:H5页面需要预先定义好函数,Native调用该函数时传递参数。 现在,构建回答: - 系统指令要求:使用中文回答,数学表达式用LaTeX内联(但这里可能不需要数学),独立公式单独成段,语法正确,生成相关问题。 - 回答结构清晰,逐步解决问题。 - 末尾添加引用标识,基于提供的引用。 回答结构: 1. 解释原理:Native通过`evaluateJavascript`执行JS代码调用H5函数,传递参数。 2. 说明H5页面如何定义函数来接收参数。 3. 举例说明。 4. 生成相关问题。 引用来源: - 基于引用[1],[2],[5],因为这些直接相关。 - 自然地添加引用标识:[^1]、[^2]、[^5]。 相关问题生成: - 根据指令:"生成相关问题",在回答末尾添加"§§相关问题§§"部分。 - 类似示例中的格式。 完整回答: - 先用中文解释。 - 代码块显示示例。 - 末尾相关问题。 </think> 基于您提供的引用内容,我将逐步解释如何在H5页面中获取通过WebView的`evaluateJavascript`方法传递的参数。Native端(Android或iOS)通过`evaluateJavascript`执行JavaScript代码字符串来调用H5页面的函数,并将参数作为函数输入传递。H5页面需要预先定义JavaScript函数来接收和处理这些参数。以下是详细说明: ### 1. **H5页面获取参数的核心原理** - Native端(如Android或iOS)使用`evaluateJavascript`执行一个JavaScript函数调用字符串,该字符串包含目标函数名和参数。 - H5页面必须提前定义该JavaScript函数,函数内部接收Native传递的参数。 - 参数可以是简单类型(如字符串、数字)或复杂数据(通过JSON字符串传递)。复杂数据需在H5中解析JSON。 - 例如: - Native调用:`webview.evaluateJavascript("myFunction('hello')", callback)` H5定义:`function myFunction(param) { console.log(param); }` 输出:`hello`(参数直接作为函数输入)[^1][^2]。 ### 2. **H5页面实现步骤(代码示例)** #### 步骤1: H5页面定义接收函数 在H5页面的JavaScript中,定义一个函数来处理Native传递的参数。函数名需与Native调用时一致。 ```html <script> // 定义函数接收参数(简单类型) function receiveData(data) { console.log("接收的参数:", data); // 直接打印参数 // 业务逻辑处理... } // 定义函数接收JSON参数(复杂数据) function handleComplexData(jsonData) { const parsedData = JSON.parse(jsonData); // 解析JSON字符串 console.log("解析后的数据:", parsedData); // 业务逻辑处理... } </script> ``` #### 步骤2: Native端调用并传递参数 Native通过`evaluateJavascript`调用上述函数,传递参数: - **Android示例**(引用参考[1][^1][^2]): ```java // 传递简单参数 webView.evaluateJavascript("javascript:receiveData('Hello from Android')", callback); // 传递JSON参数(复杂对象) String jsonParam = "{\"key\": \"value\"}"; webView.evaluateJavascript("javascript:handleComplexData('" + jsonParam + "')", callback); ``` - **iOS示例**(引用参考[5][^5]): ```objectivec // 传递JSON参数 NSDictionary *dict = @{@"userToken": @"abc123"}; NSString *jsonStr = [self convertToJsonData:dict]; // 假设转换JSON NSString *jsCall = [NSString stringWithFormat:@"handleComplexData('%@')", jsonStr]; [webView evaluateJavaScript:jsCall completionHandler:^(id _Nullable obj, NSError * _Nullable error) { NSLog(@"错误信息:%@", error); }]; ``` #### 步骤3: H5页面处理参数 - **简单参数**:直接在函数中接收,如`receiveData`函数的`data`。 - **JSON参数**:使用`JSON.parse()`解析JSON字符串,如`handleComplexData`函数。 - **示例输出**: - Native调用`receiveData('Hello')` → H5控制台输出:`接收的参数: Hello`。 - Native调用`handleComplexData('{"key":"value"}')` → H5解析后输出:`解析后的数据: { key: "value" }`。 ### 3. **注意事项** - **函数名匹配**:Native调用的函数名(如`receiveData`)必须与H5定义完全一致,否则无法触发[^1][^4]。 - **JSON安全传递**:Native端需序列化成JSON字符串并转义,H5需解析。避免语法错误(如引号未转义)[^2][^5]。 - **Android/iOS兼容性**:Android高版本(4.4+)和iOS均支持此方式,但需确保JavaScript在H5加载完成后调用[^3][^5]。 - **错误处理**:在Native的callback中检查错误(如iOS的`completionHandler`),H5函数需处理无效参数[^1][^5]。 ### 总结 H5页面通过定义JavaScript函数来接收`evaluateJavascript`传递的参数:Native调用函数名并传入参数,H5在函数内直接访问参数或解析JSON。此方法适用于简单数据和复杂对象交互,关键是确保函数名匹配和JSON正确处理[^1][^2][^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值