最近公司项目与三方h5页面对接,要求实现几个js方法,但是看了所谓的文档是这样的....

(这里马赛克的内容就是我们平时和h5约定好的注入js对象名,下文以mlb代替)
wtf????js对象?匿名函数?大哥我是用java的,可怜可怜吧 接受不了js对象啊 更别提匿名函数了,只能接受string
于是找对方沟通,对方表示为了保持良好的兼容性(LZ就不想改)
只能这个样子,你自己想办法吧~
(微笑)
我只是想要把参数json序列化,另外要个回调函数名,很简单啊 5分钟 哦不 3分钟就能搞定对吧?
可是对面死活不给改啊,这你说我该怎么办。。。
小脑袋开始思索....
我想要给他的参数穿身名为json的衣服;
我想要给可怜的匿名函数起个名纸;
想法是有了,但怎么实现呢?java实现?不存在的。js方法重载?好主意!!
大家都知道咱强大的webview是可以通过
loadUrl("javascript:"+"函数名啊什么的")
来加载js代码的,那么ok,我来帮对面完成交互应有的样子(没错,我 对接 我自己!)
摆在眼前的一座大山,我不会js代码啊 肿么办?
这么办:

接通了 接通了...

。
。
。
。

好吧 ,其实哥们儿就在旁边,肯德基在对面~
简单的讲解了下需求,作为前端巨佬的哥们,3分钟甩我脸上一段js:
//这行代码也是个坑 开始注入失败 说window.mlb未定义 需要加上这行先声明
window.mlb= {};
window.keys = {
callback: 'APPCallback'
};
window.mlb.getLocation = function (data, cb) {
//在原本的data中加入一个新的字段callback 也就是回调函数名
data.callback=keys.callback;
//将远方的cb赋值给自己声明的
window[keys.callback] = cb;
//control是我们自己跟自己人约定的标识
window.control.getLocation(JSON.stringify(data));
};
OK,万事俱备,只欠注入
在webview的onPageFinished中:
@Override
public void onPageFinished(WebView view, String url) {
//getJs是我自己写的一个方法 因为代码较多 放到了一个js文件中
//从assets中读取字符串出来 不要忘记前缀javascript:
webview.loadUrl("javascript:" + getJs());
super.onPageFinished(view, url);
}
十分舒适。
网友评论