2015-03-10 16:47:31|  分类: 软件技术|举报|字号 订阅

 
 

1. webview.addJavascriptInterface() doen not work on API 16+

常见的客户端与H5的混合编程是使用scheme+、JS bridge、provider等。

在做Android 与 H5 客户端交互时,发现一个很诡异的错误。在一个4.2.2的 三星S3上,Android Javascript Bridge 会出现回调出错。

所有挂在Bridge对象下的函数均无法找到。于是一点点排查问题到底出现在哪。

其他手机H5混合编程消息回调正常,本以为是因为是旅行V3.0是基于Fragment引起的,即fragment下不能使用。后来经过排查发现不是这个问题。

发现就是手上的一台S3不行,其他基本都可以进行消息回调。

排查了一大圈,发现在Android SDK Target API Level 16+的情况下,使用以往的方式进行Native 与 H5进行混合编程均无法搞定。

解决办法:

  1. 推荐使用较高的Target SDK去编译【4.0+】.

2. 在Javascript Bridge对象下的所有回调方法使用 @JavascriptInterface 进行注解声明

3. 需要 import android.webkit.JavascriptInterface;

使用4.0+版本的Target SDK时,需要注意对回调方法进行注解声明!这种坑 很难发现,使用类似的混合编程技术的团队请关注这点~

设备ROM版本

开发环境 Target SDK

不用注解,消息是否能生效

<4.0

>4.0

Ok

<4.0

<4.0

Ok

>4.0

>4.0

NO

<4.0

>4.0

OK

public class J2NBridgeManager {

@JavascriptInterface

public void startNativeService(String schemeUrl) {

// js回调为空 则直接返回

if (TextUtils .isEmpty(schemeUrl)) {

return;

}

final TripURL mServiceUrl = Utils.getURIByUrlWithDecoded(schemeUrl);

// 执行本地一个service ,异步处理完后,回调js

mHandler.post( new Runnable() {

@Override

public void run() {

doService(mServiceUrl);

}

});

}

}

参考文章:

如何建立通信: http://stackoverflow.com/questions/13063222/web-view-addjavascriptinterface-issue

解决问题说明: http://stackoverflow.com/questions/16353430/appview-addjavascriptinterface-doen-not-work-on-api-17

android addJavascriptInterface 不能生效 解决办法的更多相关文章

  1. android RelativeLayout 内容居中解决办法

    android RelativeLayout 内容居中解决办法:   使用Linearlayout本来利用父控件的gravity属性是很好解决的.但是对应RelativeLayout虽然有 gravi ...

  2. Android Studio 常见异常解决办法

    Error:Failed to crunch file D:\Englis_installation_directory\AndroidStudio\AndroidWorkSpace\YoukAndr ...

  3. Visual Studio Xamarin编译Android项目出错的解决办法

    安装完Xamarin后,编译Android项目时,你会发现好长时间进度都不动,当你取消编译后,会发现其实是出错了,就是因在Android项目在第一次编译时要去google网站上下一个andorid s ...

  4. 无法打开Android SDK Manager的解决办法

    不知道从什么时候开始,打开Android的SDK Manager.exe时,命令行窗口一闪就自动关掉了. 想更新一些Android的东西都更新不了. 查了一下,解决办法是: 环境变量的系统变量Path ...

  5. [转]编译Android源代码常见错误解决办法

    1. 编译时出现/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../libz.so when ...

  6. Android编译安装失败解决办法

    今天用AndroidStudio开发了一个手机App玩玩,但是偶然遇到一个问题,自己手机上测试得劲的很,分享给朋友做测试,但是nie,意外出现了.... 两个人都给我说个安装失败,这个就比较尴尬了,找 ...

  7. Android layout_margin 无效的解决办法

    http://www.aichengxu.com/view/31025 1.如果LinearLayout中使用Android:layout_marginRight不起作用,通过测试原来在android ...

  8. Android 常见异常及解决办法

    Ø  前言 本文主要记录 Android 的常见异常及解决办法,以备以后遇到相同问题时可以快速解决. 1.   java.lang.NullPointerException: Attempt to i ...

  9. 微信小程序---app.json中设置背景色不生效解决办法

    按照官方文档的说明,backgroundColor应该可以设置窗口的背景色. "window":{ "backgroundTextStyle":"li ...

随机推荐

  1. PYTHON-面向对象 类 绑定方法

    面向对象三大特性(*****) 1继承 1. 什么是继承 继承是一种新建类的方式,新建的类称之为子类/派生类,被继承的类称之为父类/基类/超类 继承与现实生活中的继承一个意思 (例如 小明继承小明他爹 ...

  2. winform(记事本的打印)

  3. python3中的编解码

    #一个知识点是:python3中有两种字符串数据类型:str类型和 bytes类型:sty类型存储unicode数据,bytes类型存储bytes数据 #当我们在word上编辑文件的时候,数据保存之前 ...

  4. PHP 发送HTTP请求的几种方式

    1.curl仍然是最好的HTTP库,没有之一. 可以解决任何复杂的应用场景中的HTTP 请求2. 文件流式的HTTP请求比较适合处理简单的HTTP POST/GET请求,但不适用于复杂的HTTP请求3 ...

  5. Adam优化算法

    Question? Adam 算法是什么,它为优化深度学习模型带来了哪些优势? Adam 算法的原理机制是怎么样的,它与相关的 AdaGrad 和 RMSProp 方法有什么区别. Adam 算法应该 ...

  6. google 与服务器搭建

    一.申请账号 二.创建实例 VPN设置 :https://juejin.im/post/5b665a51f265da0f7d4f1ab3

  7. django----数据库操作(对model增删改查)

    优化查询 articles_list=models.Article.objects.all().iterator() for i in articles_list: print(i.title) 添加 ...

  8. ERP商品类型管理相关业务处理(三十五)

    根据类型编号获取父类名称 -- ============================================= CREATE FUNCTION [dbo].[FN_getParentTyp ...

  9. poj 1961 (求字符串中的重复子串)

    Sample Input 3aaa12aabaabaabaab0Sample Output Test case #12 23 3 Test case #22 2 //aa有2个a6 2 //aabaa ...

  10. AngularJS+Node.js+socket.io 开发在线聊天室

    所有文章搬运自我的个人主页:sheilasun.me 不得不说,上手AngularJS比我想象得难多了,把官网提供的PhoneCat例子看完,又跑到慕课网把大漠穷秋的AngularJS实战系列看了一遍 ...