问题描述: 目前 Android 与 iOS 用的机制是,通过截获 URL 的跳转,判断 URL 前缀的关键字是否与之相同,如果相同则进行回调。
- 通过
setJavascriptInterfaceScheme设置 URL 前缀关键字 - 通过
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
