热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

androidwebview与js交互时遇到的问题解决

为什么80%的码农都做不了架构师?问题如下1、android调用js方法无效的问题我的原因是少了webView.setWebChromeClient(newWe

为什么80%的码农都做不了架构师?>>> hot3.png

问题如下

 

1、android调用js方法无效的问题 

    我的原因是少了

    webView.setWebChromeClient(new WebChromeClient());这一句

2、js调用android方法无效的问题

    我的原因:在api>17之后为了解决webviewjs调用任意代码的漏洞,要给回调的方法加上

    @JavascriptInterface 使用方式可以看下面的源码

    

 

解决后的代码:

public class MainActivity extends AppCompatActivity {private static final String TAG = "MainActivity";WebView webView;String text;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);webView= (WebView) findViewById(R.id.main_webview);webView.getSettings().setJavascriptEnabled(true);webView.setWebChromeClient(new WebChromeClient());
//这一句是为了不让外部链接跳转到其他app去执行,而是在我们自己的webview上显示
// webView.setWebViewClient(new WebViewClient(){
// @Override
// public boolean shouldOverrideUrlLoading(WebView view, String url) {
// view.loadUrl(url);
// return false;
// }
// });//我在raw目录下存放了一个test.html文件,代码在后面InputStream inputStream = getResources().openRawResource(R.raw.test);try {text=readStreamText(inputStream);
//加载本地的html文件webView.loadData(text,"text/html","utf-8");//设置js回调的方法,回调方法要加上@JavascriptInterface注释,第二个参数对应js中window.demo中的demowebView.addJavascriptInterface(new Object(){@JavascriptInterfacepublic void clickon(){Toast.makeText(MainActivity.this, "js call android", Toast.LENGTH_SHORT).show();}},"demo");Log.i(TAG,"text="+text);} catch (IOException e) {e.printStackTrace();}}private String readStreamText(InputStream inputStream) throws IOException {BufferedReader reader=new BufferedReader(new InputStreamReader(inputStream));StringBuffer b=new StringBuffer();String temp=null;while ((temp=reader.readLine())!=null)b.append(temp);reader.close();return b.toString();}
//android调用js的testa函数,加入webView.setWebChromeClient(new WebChromeClient())后成功alertpublic void c(View v){new Handler().post(new Runnable() {@Overridepublic void run() {webView.loadUrl("Javascript:testa()");}});}}

html(raw目录下):


hello js

 

 

 


转:https://my.oschina.net/zhouzhenBlog/blog/688673



推荐阅读
author-avatar
沙鹰之眼
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有