uniapp中plus.webview.create的evaljs如何获取返回结果

在uniapp中使用plus.webview.create创建webview后,通过evaljs执行JS代码时,如何获取JS代码的返回值?例如我执行了一段计算或异步请求,怎样才能在evaljs的回调中拿到最终结果?目前测试发现直接return无法获取到值,求具体实现方法。

2 回复

在plus.webview.create创建的webview中,使用evaljs执行JS代码后,可通过回调函数获取返回结果:

let wv = plus.webview.create('url');
wv.evaljs('return "hello"', function(result){
    console.log(result); // 输出:hello
});

注意:evaljs是异步执行的,结果在回调函数中获取。


在 UniApp 中使用 plus.webview.create 创建 Webview 后,可以通过 evalJS 方法执行 JavaScript 代码并获取返回结果。以下是具体方法:

步骤说明

  1. 创建 Webview:使用 plus.webview.create 创建新的 Webview 实例。
  2. 执行 evalJS:调用 Webview 实例的 evalJS 方法,传入要执行的 JavaScript 代码字符串。
  3. 处理返回结果evalJS 是异步方法,通过回调函数获取执行结果。

代码示例

// 创建 Webview 实例
let webview = plus.webview.create('https://example.com', 'example', {
  // 可选:配置 Webview 属性
});

// 执行 evalJS 并获取返回结果
webview.evalJS('(function() { return "Hello from Webview"; })()', function(result) {
  // 回调函数中的 result 即为 JavaScript 执行后的返回值
  console.log('evalJS 返回结果:', result); // 输出:Hello from Webview
});

注意事项

  • 返回值类型evalJS 的返回值只能是基本类型(如字符串、数字、布尔值)或可序列化的对象。如果返回复杂对象(如函数或 DOM 元素),可能无法正确传递。
  • 异步处理evalJS 是异步操作,确保在回调函数中处理结果,避免直接同步获取。
  • 错误处理:如果执行的 JavaScript 代码有错误,回调函数中的 result 可能为 nullundefined,建议在代码中添加错误捕获。

示例扩展

如果需要从 Webview 中返回复杂数据,可以使用 JSON 序列化:

webview.evalJS('(function() { return JSON.stringify({ key: "value" }); })()', function(result) {
  let data = JSON.parse(result); // 解析为对象
  console.log(data.key); // 输出:value
});

通过以上方法,您可以有效获取 evalJS 的执行结果。如有更多问题,欢迎继续咨询!

回到顶部