iOS xcode12.4版本 webview问题

问题描述: 目前 Android 与 iOS 用的机制是,通过截获 URL 的跳转,判断 URL 前缀的关键字是否与之相同,如果相同则进行回调。

  1. 通过 setJavascriptInterfaceScheme 设置 URL 前缀关键字
  2. 通过 setOnJSCallback 设置回调函数,函数参数为 URL
cc.Class({
    extends: cc.Component,
    properties: {
        webview: cc.WebView,
    },
    // onLoad 中设置会导致 API 绑定失效,所以请在 start 中设置 webview 回调。
    start: function () {
        // 这里是与内部页面约定的关键字,请不要使用大写字符,会导致 location 无法正确识别。
        var scheme = "testkey";

        function jsCallback (target, url) {
            // 这里的返回值是内部页面的 URL 数值,需要自行解析自己需要的数据。
            var str = url.replace(scheme + '://', ''); // str === 'a=1&b=2'
            // webview target
            console.log(target);
        }

        this.webview.setJavascriptInterfaceScheme(scheme);
        this.webview.setOnJSCallback(jsCallback);
    }
});

用的官网这个方法,安卓没有问题,ios运行就提示this.webview.setJavascriptInterfaceScheme不是一个方法,求解决方案

  • Creator 版本:2.3.4

  • 目标平台: iOS

  • 重现方式:必现

  • 首个报错: [ERROR] (/Users/yiyoukeji/projects/cocos/GameHall/build/jsb-default/frameworks/cocos2d-x/cocos/scripting/js-bindings/jswrapper/v8/Object.cpp, 563): Invoking function (0x280932a00) failed!

ERROR: Uncaught TypeError: this.m_webView.setJavascriptInterfaceScheme is not a function, location: src/cocos2d-jsb.js:0:0

STACK:

[0]init@src/project.js:40544

[1]e.refresh@src/project.js:34970

[2]e.start@src/project.js:34953

[3]anonymous@(no filename):3

[4]anonymous@src/cocos2d-jsb.js:12285

[5]invoke@src/cocos2d-jsb.js:12248

[6]startPhase@src/cocos2d-jsb.js:12381

[7]mainLoop@src/cocos2d-jsb.js:6465

[8]t@src/cocos2d-jsb.js:6706

[9]tick@jsb-adapter/jsb-builtin.js:2156

  • 手机型号: iphne 6

做了一个测试

2.3.4版本这个没问题。

提供demo
testWebView.zip (232.2 KB)