ggband

画重点:本本介绍webView和vue交互包含一下4点

 

1、设置title

2、app url传参到vue

3、js调用app本地方法

4、app调用js方法

 

一 设置title,由于vue是单页应用,传统项目那样配置<title>标题</title>会无效

    1、vue设置

    1)在components下面创建多个vue组件,如下图所示:

     

 

    2)配置路由;在router/index.js文件中配置

import Vue from \'vue\'
import Router from \'vue-router\'
import HelloWorld from \'@/components/HelloWorld\'
import FirstPage from \'@/components/FirstPage\'
import TwoPage from \'@/components/TwoPage\'


Vue.use(Router)

export default new Router({
  routes: [
    {
      path: \'/\',
      name: \'HelloWorld\',
      component: HelloWorld,
      meta:{
       title:"首页"
      }
    },
    {
      path: \'/firstPage\',
      name: \'FirstPage\',
      component: FirstPage,
      meta:{
        title:"firstPage"
       }
    },
    {
      path: \'/twoPage\',
      name: \'TwoPage\',
      component: TwoPage,
      meta:{
        title:"twoPage"
       }
    }
  ]
})

3)在main.js中设置

router.afterEach(function (to, from) {
  if(to.meta.title){
      document.title = to.meta.title;
  }
});

4)运行项目自测  npm run dev,浏览器访问:http://localhost:8080;跳转页面如发现title有改变说明vue配置title已成功;

 

2、app webView设置,

1)webView设置WebChromeClient

webView.setWebChromeClient(chromeClient)

2)重写WebChromeClient的onReceivedTitle(WebView view, String title)方法,其中title就是当前web页面的title,可将此title设置到app的title中显示;

 

二 app url传参到vue

  app提供参数以供前端载入页面立刻使用,一般采用url传参

       1、vue设置

       1)创建utils.js文件,其内容如下(获取url路径上的参数)

export default{
    getUrlKey: function (name) {
        return decodeURIComponent((new RegExp(\'[?|&]\' + name + \'=\' + \'([^&;]+?)(&|#|;|$)\').exec(location.href) || [, ""])[1].replace(/\+/g, \'%20\')) || null
    }
  }

      2)在main.js中引入utils.js文件,并获取url上相关的参数;代码如下

import utils from \'./utils\'

let chainName = utils.getUrlKey(\'chainName\')
console.log("chainName:"+chainName)
alert("chainName:"+chainName)

    3)代码完成后部署项目,浏览器访问 http://localhost:8080?chainName=emememememem;得到下图所示,证明vue已经接收到参数

   

 

三 js调用app本地方法

    1、app端设置

   1)  webview设置 如下:

webView.addJavascriptInterface(this, "app");
@android.webkit.JavascriptInterface
public void actionFromJs(String args) {
runOnUiThread(new Runnable() {
@Override
public void run() {
ToastUtil.toastShort("form web args:" + args);

}
});
}

  其中:app 是注入到js中的对象,js中通过app调用actionFromJs方法

    2、vue设置

<template>


<div class="hello">

<h1>first page</h1>

<p>传入原生参数是:js调用了android中的actionFromJs方法</p>
<p><button @click = "callApp()">callApp</button></p>
</div>

</template>

export default{
methods:{
   callApp(){
      // 由于对象映射,所以调用app对象等于调用Android映射的对象
      app.actionFromJs("js调用了app中的actionFromJs方法");
         }
      }
   }

</script>

 

 四  app调用js方法

  1、vue设置;vue让app能调入js方法,需要将方法赋给window;因为vue将js进行封装操作

 
  <script >

  export default {
    mounted() {
      window.formToApp = this.formToApp;
    },
    methods: {
      formToApp(args) {
        alert("app args:" + args);
      }
    }
  }

  </script>

 

   2、app设置

   在需要调用js方法位置执行即可

  callJs("formToApp", "app调用了formToApp方法");
   public void callJs(String name, String args) {
        String url = "javascript:" + name + "(\'" + args + "\')";
        webView.loadUrl(url);
    }

 

分类:

技术点:

相关文章:

  • 2021-12-15
  • 2021-08-01
  • 2021-12-03
  • 2021-11-30
  • 2020-04-06
  • 2022-01-01
  • 2021-10-18
  • 2021-12-07
猜你喜欢
  • 2021-05-25
  • 2021-04-05
  • 2021-08-29
  • 2021-08-01
  • 2021-11-22
  • 2021-04-25
  • 2021-12-14
相关资源
相似解决方案