Webview里JS跳转到Activity页面
2016-09-19 11:50
393 查看
有两种方法.
第一种是通过webview提供的js和java沟通的接口进行
一、然后,在javascript里可以通过name来引用到object对象里有@JavascriptInterface注解的方法
Java代码
javascript代码
以上是第一种方法,在index.html页面可以跳转到AActivity和BActivity。
二、第二种方式里是利用系统提供的Activity隐式启动。
当我们在webview里加载上面的代码,并点击gotoActivity B后,系统会去寻找能处理uri为”myapp://tonative/param?id=123”的Activity,默认情况下当然是没有的,所以我们可以把要打开的Activity按照约定的uri协议进行声明
我们可以通过声明不同的host实现打开不同的Activity,在打开的Activity里可以通过如下代码获取html页面传过来的参数
但这样其实有个问题,我们一般会在自己的WebviewActivity里给
从而实现在本页内的跳转都是由本Webview打开,而不是跳转到系统浏览器处理。这样设置后,‘href=”myapp://tonative/param?id=123”’这样的请求也被拦截到了本Webview里,从而失效,因此,我们需要做一个判断
return true,表明这次请求交给系统来处理。
第一种是通过webview提供的js和java沟通的接口进行
public void addJavascriptInterface(Object object, String name)
一、然后,在javascript里可以通过name来引用到object对象里有@JavascriptInterface注解的方法
Java代码
WebView wv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); wv = (WebView)findViewById(R.id.webView); wv.getSettings().setJavaScriptEnabled(true); wv.addJavascriptInterface(this, "nativeMethod"); wv.loadUrl("file:///android_asset/index.html"); } @JavascriptInterface public void toActivity(String activityName) { //此处应该定义常量对应,同时提供给web页面编写者 if(TextUtils.equals(activityName, "a")){ startActivity(new Intent(this,AActivity.class)); }else{ startActivity(new Intent(this,BActivity.class)); } }
javascript代码
<!DOCTYPE HTML> <html> <script type="text/javascript"> function gotoActivity (activity) { nativeMethod.toActivity(activity); } </script> <body> <button onClick="gotoActivity('a')">gotoActivity A</button> <button onClick="gotoActivity('b')">gotoActivity B</button> </body> </html>
以上是第一种方法,在index.html页面可以跳转到AActivity和BActivity。
二、第二种方式里是利用系统提供的Activity隐式启动。
<!DOCTYPE HTML> <html> <body> <a href="myapp://tonative/param?id=123">gotoActivity B</a> <a href="http://www.baidu.com">open http link</a> <a href="file:///android_asset/b.html">open local file</a> </body> </html>
当我们在webview里加载上面的代码,并点击gotoActivity B后,系统会去寻找能处理uri为”myapp://tonative/param?id=123”的Activity,默认情况下当然是没有的,所以我们可以把要打开的Activity按照约定的uri协议进行声明
<activity android:name=".BActivity" android:parentActivityName=".AActivity"> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:host="tonative" android:scheme="myapp" /> </intent-filter> </activity>
我们可以通过声明不同的host实现打开不同的Activity,在打开的Activity里可以通过如下代码获取html页面传过来的参数
Intent intent = getIntent(); String action = intent.getAction(); if(Intent.ACTION_VIEW.equals(action)){ Uri uri = intent.getData(); if(uri != null){ String id = uri.getQueryParameter("id"); Toast.makeText(this,id,Toast.LENGTH_LONG).show(); } }
但这样其实有个问题,我们一般会在自己的WebviewActivity里给
wv.setWebViewClient(new WebViewClient(){})
从而实现在本页内的跳转都是由本Webview打开,而不是跳转到系统浏览器处理。这样设置后,‘href=”myapp://tonative/param?id=123”’这样的请求也被拦截到了本Webview里,从而失效,因此,我们需要做一个判断
wv.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { String scheme = Uri.parse(url).getScheme();//还需要判断host if (TextUtils.equals("myapp", scheme)) { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(intent); return true; } return false; } });
return true,表明这次请求交给系统来处理。
相关文章推荐
- activitygroup的子activity中嵌套webview,利用webview与js交互,在实现js点击的内部类代码中实现activity跳转出现的线程问题
- 在webview中如何监听页面的点击事件并跳转到指定的Activity?
- Android使用Webview显示页面以及点击跳转startActivity问题
- 在一个webview里跳转到新的activity里,webview无法响应js事件的问题
- google tv上webview页面js实现焦点跳转
- Android Webview 调用JS跳转到指定activity
- Android快速实现WebView利用JS跳转Activity
- WebView js判断是否联网后页面自动跳转
- webview html页面加载本地js及img src(二)
- js 检测web页面是否正在操作,如超过规定时间内未操作将自动跳转至指定页面。
- webview的跳转始终在自己的activity,而不调用浏览器
- web页面跳转 JS
- ios与js交互,获取webview完整url,title,获取元素并赋值跳转
- 百度高度js 检测web页面是否正在操作,如超过规定时间内未操作将自动跳转至指定页面。
- Android内嵌网页webview点击其中的链接跳转到我们应用内的Activity
- webview html页面加载本地js及img src(一)
- webview中实现当点击网页中的按钮的时候,跳转到本地的activity。
- Android中 Webview中js与Activity的交互
- webview html页面加载本地js及img src
- Android内嵌网页webview点击其中的链接跳转到我们应用内的Activity