browser.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  1. const url = require('url');
  2. const remote = require('electron').remote;
  3. const Menu = remote.Menu;
  4. Namespace.register("CampusInfoBrowser");//注册命名空间
  5. CampusInfoBrowser.CreatBrower=function (address) {//创建窗口
  6. var http = /^(http)/;
  7. var https = /^(https)/;
  8. var li=$$("li", {//创建ul下的li
  9. "className": "BrowerList"
  10. }, CampusInfoBrowser.NavContainer);
  11. var ListBody=$$("div", {//创建li下的div
  12. "className": "BrowerListBody"
  13. }, li);
  14. CampusInfoBrowser.NavContainer.insertBefore(li,CampusInfoBrowser.AddButton);//把新建标签页按钮追加到ul的li下
  15. li.data={//传窗口地址
  16. "url":address
  17. };
  18. ListBody.tag_favicon=$$("img", {//标签页图标
  19. "className": "tag_favicon", "draggable":"false", "alt":""
  20. }, ListBody);
  21. ListBody.tag_favicon.onerror=function () {//不存在时显示的标签页图标
  22. this.src='public/img/tray/app.ico'
  23. };
  24. ListBody.Webname=$$("p", {//标签页标题
  25. "className": "Webname","innerHTML":"正在加载","draggable":"false"
  26. }, ListBody);
  27. ListBody.tag_close=$$("i", {//标题页关闭按钮
  28. "className":"icon-cancel tag_close"
  29. }, ListBody);
  30. var BrowerContainer=$$("div", {"className":"BrowerContainer"},$("body")[0]);//装载webview
  31. var webview=$$("webview", {//创建webview
  32. "allowpopups":"", "autosize":"on"
  33. }, BrowerContainer);
  34. webview.tag=li;//把li赋给webview标签
  35. webview.addEventListener("new-window",function (e) {//访客页面尝试打开新的浏览器窗口时触发。
  36. const protocol=url.parse(e.url).protocol;
  37. if(protocol==='http:'||protocol==='https:'||protocol==="about:blank"){
  38. CampusInfoBrowser.CreatBrower(e.url);//系统的默认浏览器中打开新的URL
  39. }
  40. });
  41. webview.addEventListener("page-favicon-updated",function (e) {//当页面收到图标网址时触发
  42. ListBody.tag_favicon.src=e.favicons[0];
  43. });
  44. webview.addEventListener('will-navigate',function (e) {//导航跳转时触发
  45. this.tag.data.url=e.url
  46. });
  47. webview.addEventListener('did-navigate',function (e) {//导航完成时触发
  48. this.tag.data.url=e.url;``
  49. ListBody.Webname.innerHTML=this.getTitle();
  50. ListBody.click();
  51. });
  52. webview.addEventListener('dom-ready',function (e) {//加载完成webview后执行
  53. var canGoForward = $(".icon-right")[0];//获取前进图标
  54. var canGoBack = $(".icon-left")[0];//获取后退图标
  55. var reFresh = $(".refresh")[0];//获取刷新图标
  56. ListBody.Webname.innerHTML=this.getTitle();//更改webview的title
  57. CampusInfoBrowser.goBackWebView = function(){//执行后退
  58. webview.goBack();
  59. }
  60. CampusInfoBrowser.goForwardWebView = function(){//执行前进
  61. webview.goForward();
  62. }
  63. CampusInfoBrowser.reFresh = function(){//执行刷洗
  64. webview.reload();
  65. }
  66. if(webview.canGoBack()){//判断是否可以后退
  67. canGoBack.style.color = '#5a5a5a';
  68. }else{
  69. canGoBack.style.color = '#d3d3d3';
  70. }
  71. if(webview.canGoForward()){//判断是否可以前进
  72. canGoForward.style.color = '#5a5a5a';
  73. }else{
  74. canGoForward.style.color = '#d3d3d3';
  75. };
  76. if(CampusInfoBrowser.UrlArea.value == ""){
  77. reFresh.style.color = '#d3d3d3';
  78. }else{
  79. reFresh.style.color = '#5a5a5a';
  80. }
  81. });
  82. webview.onmousedown=function (e) {//webview鼠标事件
  83. CampusInfoBrowser.MouseMenu(CampusInfoBrowser.MouseMenuMain,this,CampusInfoBrowser.MouseMenuCallBack,e)//右键显示创建应用菜单
  84. CampusInfoBrowser.OnclickMenu.style.display="none";
  85. }
  86. ListBody.tag_close.onclick=function () {//点击标题页关闭按钮
  87. event.stopPropagation();
  88. var closeArr = [];
  89. for(var i=0;i<$(".tag_close").length;i++){//遍历li下关闭图标
  90. closeArr.push($(".tag_close")[i]);
  91. }
  92. closeArr[0].index = 0;//设置li下第一个关闭图标的index
  93. if(ListBody.tag_close.index == 0){
  94. webview.tag.nextSibling.onclick();//点击当前li下一个
  95. }else{
  96. webview.tag.previousSibling.onclick();//点击当前li上一个
  97. }
  98. CampusInfoBrowser.NavContainer.removeChild(webview.tag);//移除当前li
  99. $("body")[0].removeChild(BrowerContainer);//移除当前webview
  100. }
  101. webview.src=address;//给webview的src传值
  102. CampusInfoBrowser.UrlArea.onkeydown=function (e) {//获取搜索框值
  103. if(e.keyCode===13){//keycode为13
  104. if(this.value){//如果存在值
  105. if(this.value.match(http) || this.value.match(https)){//判断是否存在http或https
  106. webview.src=this.value;//给webview的src传值
  107. webview.tag.children[0].children[0].style.display = "block";//标签页图标显示
  108. }else {
  109. webview.src='http://'+this.value;//给webview的src传值
  110. webview.tag.children[0].children[0].style.display = "block";//标签页图标显示
  111. }
  112. }
  113. }
  114. };
  115. CampusInfoBrowser.IconLock();//判断是否为https
  116. CampusInfoBrowser.Bind();
  117. ListBody.click();//点击li下的包裹节点
  118. };
  119. CampusInfoBrowser.MouseMenu=function (menu_main,data,callback,e) {//右键菜单事件
  120. // e.preventDefault();
  121. // e.stopPropagation();
  122. var createNode=menu_main.parentNode;//获取第一和参数父元素
  123. var MouseMenuMain=$('.MouseMenuMain');//获取右键菜单事件的ul元素
  124. for(var i=0;i<MouseMenuMain.length;i++){//隐藏右键菜单事件所有
  125. MouseMenuMain[i].style.display='none';
  126. }
  127. document.onmouseup=function () {//鼠标事件后触发
  128. if (e.button === 2) {
  129. menu_main.style.left = e.pageX + -parseFloat(createNode.getBoundingClientRect().left)+createNode.offsetLeft+ 'px';//菜单定位横坐标
  130. menu_main.style.top = e.pageY + -parseFloat(createNode.getBoundingClientRect().top)+createNode.offsetTop+ 'px';//菜单定位纵坐标
  131. menu_main.style.display = 'block';//显示菜单
  132. if(menu_main.getBoundingClientRect().left+menu_main.offsetHeight-createNode.getBoundingClientRect().left>createNode.offsetWidth){//判断距左位置
  133. menu_main.style.left=menu_main.style.left.split('px')[0]-menu_main.offsetWidth+'px';//距左多少
  134. }
  135. if(menu_main.getBoundingClientRect().top+menu_main.offsetHeight-createNode.getBoundingClientRect().top>createNode.offsetHeight){//判断距上位置
  136. menu_main.style.top=menu_main.style.top.split('px')[0]-menu_main.offsetHeight+'px';//距上多少
  137. }
  138. callback(data);//webview传入回调函数
  139. document.onmouseup = null;//清空
  140. }
  141. };
  142. createNode.onclick=createNode.onmousewheel=function () {//执行右键菜单隐藏
  143. for(var i=0;i<MouseMenuMain.length;i++){
  144. MouseMenuMain[i].style.display='none';//隐藏
  145. }
  146. callback(data);//webview传入回调函数
  147. };
  148. };
  149. CampusInfoBrowser.MouseMenuCallBack=function (webview) {//右键菜单回调函数
  150. CampusInfoBrowser.MouseMenuCallBack.GoBack=function () {//返回
  151. webview.goBack();
  152. };
  153. CampusInfoBrowser.MouseMenuCallBack.canGoForward=function () {//前进
  154. webview.goForward();
  155. };
  156. CampusInfoBrowser.MouseMenuCallBack.reload=function () {//刷新
  157. webview.reload();
  158. };
  159. CampusInfoBrowser.MouseMenuCallBack.SourceCode = function () {//查看源代码
  160. CampusInfoBrowser.CreatBrower("view-source:"+CampusInfoBrowser.UrlArea.value);
  161. };
  162. CampusInfoBrowser.MouseMenuCallBack.SaveAs = function(){//保存
  163. function fakeClick(obj) {
  164. var ev = document.createEvent("MouseEvents");
  165. ev.initMouseEvent("click", true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
  166. obj.dispatchEvent(ev);
  167. }
  168. function exportRaw(name, data) {
  169. var urlObject = window.URL || window.webkitURL || window;
  170. var export_blob = new Blob([data]);
  171. var save_link = document.createElementNS("http://www.w3.org/1999/xhtml", "a")
  172. save_link.href = urlObject.createObjectURL(export_blob);
  173. save_link.download = name;
  174. fakeClick(save_link);
  175. }
  176. exportRaw('test.html', 'hello world');
  177. }
  178. CampusInfoBrowser.MouseMenuCallBack.openDevToolsDown = function(){//打开开发者工具
  179. if(webview.isDevToolsOpened()){//判断是否存在
  180. webview.closeDevTools();//关闭开发者工具
  181. }
  182. webview.openDevTools();//打开开发者工具
  183. }
  184. };
  185. CampusInfoBrowser.Action=function(){//过程中的执行
  186. CampusInfoBrowser.BrowersTag.title = $(".Webname");//获取标题标签
  187. CampusInfoBrowser.BrowerListBody = $(".BrowerListBody");
  188. var title = CampusInfoBrowser.BrowerListBody[0].offsetWidth;//获取title的宽度
  189. for(var i=0;i<CampusInfoBrowser.BrowersTag.title.length;i++){//遍历li标签页
  190. if(title>10){//title小于10
  191. CampusInfoBrowser.BrowersTag.title[i].style.display = "block";//遍历的标题设置隐藏
  192. }else{
  193. CampusInfoBrowser.BrowersTag.title[i].style.display = "none";//遍历的标题设置显示
  194. }
  195. }
  196. }
  197. CampusInfoBrowser.Bind=function(){//绑定
  198. var http = /^(http)/;//http
  199. var https = /^(https)/;//https
  200. CampusInfoBrowser.BrowersTag=$(".BrowerList");//获取选项卡li
  201. CampusInfoBrowser.BrowerContainer=$(".BrowerContainer");//获取webview
  202. for(var i=0;i<CampusInfoBrowser.BrowersTag.length;i++){//对选项卡及webview进行操作
  203. (function (i) {
  204. CampusInfoBrowser.BrowersTag[i].onclick=function () {
  205. for(var j=0;j<CampusInfoBrowser.BrowersTag.length;j++){
  206. CampusInfoBrowser.BrowersTag[j].className='BrowerList';
  207. CampusInfoBrowser.BrowersTag[0].className='BrowerList Listindex';
  208. CampusInfoBrowser.BrowerContainer[j].style.display='none';
  209. }
  210. CampusInfoBrowser.BrowersTag[i].className+=' BrowerActive';
  211. CampusInfoBrowser.BrowerContainer[i].style.display='block';
  212. CampusInfoBrowser.UrlArea.value=this.data.url;
  213. webview = CampusInfoBrowser.BrowerContainer[i].children[0];
  214. webview.addEventListener("dom-ready", function() {
  215. var canGoForward = $(".icon-right")[0];//获取前进图标
  216. var canGoBack = $(".icon-left")[0];//获取后退图标
  217. var reFresh = $(".refresh")[0];//获取刷新图标
  218. // webview.reloadIgnoringCache();
  219. if(webview.canGoBack()){//判断是否可以后退
  220. canGoBack.style.color = '#5a5a5a';
  221. }else{
  222. canGoBack.style.color = '#d3d3d3';
  223. }
  224. if(webview.canGoForward()){//判断是否可以前进
  225. canGoForward.style.color = '#5a5a5a';
  226. }else{
  227. canGoForward.style.color = '#d3d3d3';
  228. };
  229. if(CampusInfoBrowser.UrlArea.value == ""){
  230. reFresh.style.color = '#d3d3d3';
  231. }else{
  232. reFresh.style.color = '#5a5a5a';
  233. }
  234. });
  235. CampusInfoBrowser.UrlArea.onkeydown=function (e) {//获取搜索框值
  236. if(e.keyCode===13){
  237. if(this.value){
  238. if(this.value.match(http) || this.value.match(https)){//判断是否存在http或https
  239. webview.src=this.value;
  240. webview.tag.children[0].children[0].style.display = "block";
  241. }else {
  242. webview.src='http://'+this.value;
  243. webview.tag.children[0].children[0].style.display = "block";
  244. }
  245. }
  246. }
  247. };
  248. CampusInfoBrowser.IconLock();//判断是否为https
  249. }
  250. })(i)
  251. }
  252. var LIwidth = ((CampusInfoBrowser.NavContainer.offsetWidth - 120)/CampusInfoBrowser.BrowersTag.length)-10;//得到每个li标签页宽度
  253. if(CampusInfoBrowser.BrowersTag.length>=28){//如果如果li标签页大于35
  254. confirm("窗口太多,请关闭一些再使用");//弹出提示
  255. return false;
  256. }
  257. };
  258. CampusInfoBrowser.Init=function () {//初始化
  259. CampusInfoBrowser.UrlArea=$(".bowerSeach input")[0];//获取搜索框
  260. CampusInfoBrowser.NavContainer=$(".bowerCreaterWindow")[0];//获取标签页ul
  261. CampusInfoBrowser.AddButton=$(".BrowwerAdd")[0];//获取新建标签页按钮
  262. CampusInfoBrowser.BrowersMenuButtom=$("#bowerMenu")[0];//获取打开菜单
  263. CampusInfoBrowser.MouseMenuMain=$("#CampusInfoBrowserMenu")[0];//获取右键菜单
  264. CampusInfoBrowser.OnclickMenu=$("#CampusInfoBrowserOnclickMenu")[0];//获取菜单
  265. CampusInfoBrowser.AddButton.onclick= function (){//点击新建标签页
  266. CampusInfoBrowser.CreatBrower('');
  267. var canGoForward = $(".icon-right")[0];//获取前进图标
  268. var canGoBack = $(".icon-left")[0];//获取后退图标
  269. var reFresh = $(".refresh")[0];//获取刷新图标
  270. canGoBack.style.color = '#d3d3d3';
  271. canGoForward.style.color = '#d3d3d3';
  272. reFresh.style.color = '#d3d3d3';
  273. CampusInfoBrowser.UrlArea.focus();
  274. if(CampusInfoBrowser.UrlArea.value === ""){
  275. this.previousSibling.children[0].children[1].innerHTML = "新标签页";
  276. this.previousSibling.children[0].children[0].style.display = "none";
  277. }
  278. };
  279. CampusInfoBrowser.BrowersMenuButtom.onclick=function (event) {//点击菜单
  280. // event.preventDefault();
  281. CampusInfoBrowser.OnclickMenu.style.display="block";
  282. (event || window.event).cancelBubble = true
  283. };
  284. document.onclick = function (){
  285. CampusInfoBrowser.OnclickMenu.style.display="none";
  286. };
  287. CampusInfoBrowser.IconLock = function(){//判断是否为https
  288. var http = /^(http)/;//http
  289. var https = /^(https)/;//https
  290. if(CampusInfoBrowser.UrlArea.value.search(https)!=-1){//判断搜索框是否有https
  291. $(".bowerSeach span")[0].style.color = '#035816';
  292. }else {
  293. $(".bowerSeach span")[0].style.color = '#d3d3d3';
  294. }
  295. }
  296. window.onresize=function (e) {
  297. Array.prototype.forEach.call($("webview"), function (elm) {
  298. elm.style.width=elm.style.height='100%';//给webview设置100%宽高
  299. });
  300. };
  301. setInterval('CampusInfoBrowser.Action()',1000);
  302. CampusInfoBrowser.CreatBrower('https://www.baidu.com');//开始进入一个页面
  303. }();