electron中实现通过webview实现内嵌网页并嵌入css样式和js脚本等

1.在electron 的目录文件 index.vue中:

 <template>
  <div class="inspeckCheck_content">
    <nav-bar />
    <banner />
    <div class="title-container">
       <div class="title"> 欢迎使用自助机服务 </div>
        <div class="right" @click="readCard">读卡</div>
     </div>
    <webview id="geekori" :src=" 'http://192.168.0.149:8888/?time=' + new Date()" style="width:1080px; height:862px" nodeintegration="true"></webview>
    <foot-bar />
  </div>
</template>
export default {
  name: 'dashboard',
  data() {
    return {
      Dll: null,
      Hdle: 0,
      readFlag: true
    }
  },
  components: {
    navBar,
    footBar,
    banner
  },
  computed: {
  },
  mounted() {
    this.onload()
  },
  methods: {
    /* 和webview 通信*/
    onload() {
      const webview = document.getElementById('geekori')
      const loadstart = () => {
        console.log('loadstart')
      }
      const loadstop = () => {
        console.log('loadstop')
      }
      webview.addEventListener('did-start-loading', loadstart)
      webview.addEventListener('did-stop-loading', loadstop)
      webview.addEventListener('dom-ready', () => {
        webview.openDevTools()// webview加载完成,可以处理一些事件了
      })
      // 在此监听事件中接收webview嵌套页面所响应的事件
      webview.addEventListener('ipc-message', function(event) {
        console.log(11111)
        console.log('在此监听事件中接收webview嵌套页面所响应的事件', event.channel)
        if (event.channel === 'print') {
          // 原生处理打印成功后,告诉嵌入页面
          webview.send('ping', '打印成功') // 向webview嵌套的页面发送信息
        }
      })
    }
    }

2.在main主进程中 index.js
注意: 必须写
webPreferences: {
nodeIntegration: true // 注入node模块
}
不然下边vue的项目中 window.require一直未undefined

mainWindow = new BrowserWindow({
    height: 1000,
    useContentSize: true,
    width: 1080,
    frame: false,
    resizable: false, // 禁止改变主窗口尺寸
    webPreferences: {
      nodeIntegration: true // 注入node模块
    }
  })

3、嵌入页的步骤
在vue搭建的项目中

(1)安装electron cnpm install electron -S

(2)代码如下:

 methods: {
    open(routeData) {
      console.log(routeData)
      // 没有在electron里面嵌入,不可用
      if (window.require) {
        // debugger
        const { ipcRenderer } = window.require('electron')
        ipcRenderer.sendToHost('print') // 向原生发送信息
        ipcRenderer.on('ping', (event, message) => { // 接收electron原生返回的信息
          console.log('接收electron原生返回的信息', event, message)
        })
      }

      this.$router.push({
        path: routeData.path,
        query: routeData.query
          ? {
            key: this.$Base64.encode(JSON.stringify(routeData.query))
          }
          : undefined
      })
    },
  }

参考:https://www.cnblogs.com/badaoliumangqizhi/p/12995335.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值