【转载】js关闭当前页面(支付宝,微信,app)

原文地址:js关闭当前页面(支付宝,微信,app)_weixin_33708432的博客-CSDN博客

使用js 关闭当前页面 , 一般想到的都是 window.close() , 但是该方法只能关闭通过 window.open() 打开的页面

所以针对这种情况 , 只能分情况去解决 .

在微信 , 支付宝 , app 中打开外部链接 , 都是使用webview打开页面的 , 所以需要app提供映射方法 .

对于微信 , 支付宝 , 我们能通过开放平台找到对应的方法.

微信:

window.WeixinJSBridge.call('closeWindow')

支付宝:

window.AlipayJSBridge.call('closeWebview')

对应一般的app ,需要开发者封装可以让js调用的方法 . (以下就是js 和 app的交互方法)

Javascript调用Java方法

以Android的Toast的为例,下面看下如何从Javascript代码中调用系统的Toast。
先定义一个AndroidToast的Java类,它有一个show的方法用来显示Toast:

public class AndroidToast {

    @JavascriptInterface

    public void show(String str) {

        Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();

    }

}

再对WebView进行设置,开启JavaScipt,注册JavascriptInterface的方法:

private void initView() {

    webView = (WebView) findViewById(R.id.webView);

    WebSettings webSettings = webView.getSettings();

    webSettings.setJavaScriptEnabled(true);

    webSettings.setDefaultTextEncodingName("UTF-8");

    webView.addJavascriptInterface(new AndroidToast(), "AndroidToast");

    webView.loadUrl("file:///android_asset/index.html");

}

addJavascriptInterface的作用是把AndroidToast类映射为Javascript中的AndroidToast。这样就可以在JavaScript中调用Java中的方法了。

在Javascript中调用Java代码:

function toastClick(){

    window.AndroidToast.show('from js');

}

通过window属性可以找到映射的对象AndroidToast,直接调用它的show方法即可。
注意这里传输的数据只能是基本数据类型和string,可以传输string就意味着可以使用json传输结构化数据。
这里调用的方法并没有返回值,如果需要在JavaScript中需要得到返回值怎么办呢?JavaScript调用Java有返回值
如果想从Javascript调的方法里面获取到返回值,只需要定义一个带返回值的@JavascriptInterface方法即可:​​​​​​​

public class AndroidMessage {

    @JavascriptInterface

    public String getMsg() {

        return "form java";

    }

}

添加Javascript的映射:
webView.addJavascriptInterface(new AndroidMessage(), "AndroidMessage");
在JavaScript直接调用:​​​​​​​

function showAlert(){

    var str=window.AndroidMessage.getMsg();

    console.log(str);

}

这样就完成了有返回值的方法调用。还有一种场景是,在Java中主动触发JavaScript方法,就需要在Java中调用JavaScript方法了。Java调用JavaScript方法

Java在调用JavaScript方法的时候,需要使用WebView.loadUrl()方法,它可以直接在页面里执行JavaScript方法。
首先定义一个JavaScript方法给Java调用:

function callFromJava(str){

    console.log(str);

}

在Java中直接调用该方法:​​​​​​​

public void javaCallJS(){

    webView.loadUrl("javascript:callFromJava('call from java')");

}

可以在loadUrl中给Javascript方法直接传参,如果JavaScript方法有返回值,使用WebView.loadUrl()是无法获取到返回值的,需要JavaScript返回值给Java的话,可以定义一个Java方法提供给JavaScript调用,然后Java调用JavaScript之后,JavaScript触发该方法把返回值再传递给Java。
注意WebView.loadUrl()必须在Ui线程中运行,不然会会报错。

以下是项目中用到的具体代码:​​​​​​​

var isLppzApp = false

var ua = navigator.userAgent.toLowerCase()

var uaApp = ua ? ua.match(/BeStore/i) : '' // match方法返回的是对象

var uaAndroid = /android/i.test(ua) // test返回的是true/false

var uaIos = /iphone|ipad|ipod/i.test(ua)

if (uaApp.toString() === 'bestore') { // 必须将match返回的对象转成字符串

    isLppzApp = true

} else {

    isLppzApp = false

}

if (window.WeixinJSBridge) {

    window.WeixinJSBridge.call('closeWindow') // 微信

} else if (window.AlipayJSBridge) {

    window.AlipayJSBridge.call('closeWebview') // 支付宝

} else if (isLppzApp && uaAndroid) {

    window.obj.closePageLppzRequest('') // 安卓app

} else if (isLppzApp && uaIos) {

    window.webkit.messageHandlers.closePageLppzRequest.postMessage('') //ios app

}

相关资源:JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值