android 4.4 js调用webview activity方法记载

前几天项目中遇到了整个问题,在android2.2上跑,ok,木有问题。拿到4.4上测试,在webview中没有反应。

这是因为在android4.2.X之后google公司对webview进行了一次漏洞修补。只允许js调用java中用@JavascriptInterface注解了的方法。看网上的解决方法,发现说的不甚明了,这里我还是把这个解决终极总结给写出来吧,后来人少走弯路吧。

相信猿友们已经搜索过了很多这方面的解决办法:

正如上所说,需要在你js调用的方法前加上@JavascriptInterface 的注解。但是有部分人的代码会报错说找不到类,需要创建类。然后大概会像我一样去搜这个注解的类支持库。呵呵呵。。。开始走弯路了。

其实在android4.2中已然有了这个类。我们只需要将properties中的编译sdk换成4.2的17即可。如果你电脑上没有装17的sdk,恩,这个问题么。自己解决!

貌似没有代码就没有说服力哇,象征性加入一段代码(然并卵):

class Ccl{
			Context context;
			@SuppressLint("JavascriptInterface")
			public Ccl(Context context){
				this.context = context;
			}
			@JavascriptInterface
			public void showMap(String jingdu,String weidu){
				judgeInstall(jingdu,weidu);
			}
		}
javascript:ccl.showMap('\"+jingdu+\"','\"+weidu+\"');\"

ok!

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-13 17:13:59

android 4.4 js调用webview activity方法记载的相关文章

CEF3中js调用delphi内部方法

在CEF1中JS调用delphi的方法已经贴过:http://www.cnblogs.com/Delphi-Farmer/archive/2013/05/17/3083794.html 但是CEF3升级了,貌似内核都不一样了,CEF1中的方法失效了,查阅了一些资料,得出如下结果: delphi代码: interface uses ceflib;//其它 type //这里建议用class 不建议用class(TThread) 不然有些地方要报错 TMyExtension = class(TThr

js调用.net后台事件,和后台调用前台等方法以及js调用服务器控件的方法

http://blog.csdn.net/deepwishly/article/details/6670942  ajaxPro.dll基础教程(前台调用后台方法,后台调用前台方法) 1. javaScript函数中执行C#代码中的函数: 方法一:间接触发后台代码 1.首先建立一个服务端控件按钮命名为btn1,双击进入后台将调用或处理的内容写入btn1_click中; 2.在前台写一个js函数,内容为document.getElementByIdx("btn1").click(); 3

WebView js 调用Java本地方法

webView = (WebView) this.findViewById(R.id.webview); WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); webView.addJavascriptInterface(new Object(){ /** * 这个注解,是4.0一下,别人可以随便调用本地方法.缺少安全性, * 4.0以上,为了防止别人调用其他的方法.加上了

WebKit.Net JS调用Winform后台方法

最近做winform嵌套WebKitBrowser遇到一些巨大的坑,WebKitBrowser页面内的JS方法调用winform后台方法,死活找不到,最后看到WebKitBrowser的 DocumentTitleChanged方法,这个也许可以将就一下. 前台JS更改WebKitBrowser页面title,而且每次更改都不一样,后台触发DocumentTitleChanged方法 前台页面JS方法 function go(str) { var now=new Date(); var numb

Android各种获取代码调用栈的方法[补]

打印调用栈不用说,基本上每位开发者都会用到,讨论几个方法,以前也说过,http://blog.csdn.net/freshui/article/details/9456889 再次简单整理一下吧,啰嗦就啰嗦了 :) 基本分两大类,一类是静态的,要把打印语句插入到代码中,一类是动态的,需要看的时候,查看一下,实时观测各线程调用栈情况. 静态方法 1. Java中打印调用栈 比较简单,利用Throwable,直接log中打印出来: [java] view plain copy Log.d(TAG, 

ajaxpro——js调用后台的方法

前提:添加并引用类库ajaxpro.dll 1.把引用的类库改为自己(如果是自己的话,就不用修改): <%@ Page Language="C#" AutoEventWireup="true" Inherits="ProductList" CodeBehind="ProductList.aspx.cs" ValidateRequest="false" %> 注意顺序 2.去掉后台代码的命名空间或

android之绑定服务调用服务的方法

public class MainActivity extends Activity { private music.MyBinder mm;//在activity里面得到服务ibinder对象的引用 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public v

【WebForm】Js调用后台C#方法

因业务的需要,有这么个需求,需要前台的JS传参调用C#后台的方法.现在有这么个方法可以解决,整理如下. 首先,先说一下基本实现,前台用Jquery的ajax将其中的URL后加方法,然后在Data中传递参数.在返回的Data中 获取到数据,并做相应的处理.而后端呢,则是在对应的方法加标记WebMethod. 前端JS: $.ajax({ type: "post", dataType: "json", data: "{jsTime:'" + jsTi

js调用Angular的方法

方法1: //通过DOM操作获取app对象 var $scope = angular.element("#hdUserId").scope(); //hdUserId:ng-controller内任意元素 $scope.Init(); //调用方法 方法2: //获取angular控制器对象元素 var appElement = document.querySelector('[ng-controller=homectrl]'); //对应前端ng-controller=homectr