webview标签


webview标签是electron中才有的html标签,使用 webview 标签来把 'guest' 内容(例如 web pages )嵌入到你的 Electron app 中,guest的html内容包含在 webview 容器中。

与 iframe 不同,webview 和你的应用运行的是不同的进程,它不拥有渲染进程的权限,并且应用和嵌入内容之间的交互全部都是异步的,两个进程都是相互隔离的。

本篇主要讲electron中API文档没有的内容,webview的查找和窗口间的替换,还有webview的遮罩界面功能,本篇所用的眼神的页面结果如图所示,其中有两个窗口,分别加载index.html和web.html,在index.html中存在两个webview,而#web1又内嵌一个#web1的页面。

 webview标签  - 图1

webview查找

  • index.html页面内webview查找
  1. var webview = document.getElementById('web2');
  • index.html嵌套在webview中的子webview查找
  1. var wvParent = document.getElementById('web1');
  2. wvParent.getWebContents().findWebview('web1', function (webRef) {
  3. console.log(webRef);
  4. });
  • 查找web.html窗口内webview
  1. //创建另外一个窗口,加载web.html页面
  2. var win = new BrowserWindow({ width: 400, height: 300});
  3. win.loadURL('file://'+__dirname+'/web.html');
  4. var webcontent = win.webContents;
  5. webcontent.findWebview('web1',function(webRef){//在web.html页面查找id为web1的webview对象
  6. console.log(webRef);
  7. }

页面内webview移动

  1. var wv1 = document.getElementById('web1');//查找index.html页面的webview对象
  2. wv1.appendToOtherNodeInPage(document.getElementById('div2'));
  3. //使用appendToOtherNodeInPage方法移动到本页面的div2下

页面内webview替换

  1. var wv1 = document.getElementById('web1');
  2. var wv2 = document.getElementById('web2');
  3. wv1 .transferTo(wv2);//用#web1替换#web2

页面间webview替换

  1. var wv1= document.getElementById('web1');
  2. var webcontent =win.webContents;
  3. webcontent.findWebview('web1',function(webRef){//查找另外一个窗口的#web1对象
  4. wv1.transferTo(webRef);//替换
  5. });

页面间webview替换完成事件

  1. //在index.html上面监听atom_transfer_over,当index.html的#web1替换了本页面web.html中的#web1时触发
  2. document.addEventListener('atom_transfer_over',function(){
  3. alert('aa');},false);

webview遮罩界面

webview启动时候创建的等待界面实际上是里面创建了一个跟webview大小一样的iframe,在iframe里面加载了/resources/electron.asar/renderer/web-view/wait-webview.html页面;

当在webview的dom-ready事件触发了,也就是页面准备好了,此时删除了该遮罩iframe;

当webview在替换的时候,被替换的webview如果还有遮罩界面,此时也会删除该遮罩iframe。