browser.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  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:'){
  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. }
  85. ListBody.tag_close.onclick=function () {//点击标题页关闭按钮
  86. event.stopPropagation();
  87. var closeArr = [];
  88. for(var i=0;i<$(".tag_close").length;i++){//遍历li下关闭图标
  89. closeArr.push($(".tag_close")[i]);
  90. }
  91. closeArr[0].index = 0;//设置li下第一个关闭图标的index
  92. if(ListBody.tag_close.index == 0){
  93. webview.tag.nextSibling.onclick();//点击当前li下一个
  94. }else{
  95. webview.tag.previousSibling.onclick();//点击当前li上一个
  96. }
  97. CampusInfoBrowser.NavContainer.removeChild(webview.tag);//移除当前li
  98. $("body")[0].removeChild(BrowerContainer);//移除当前webview
  99. }
  100. webview.src=address;//给webview的src传值
  101. CampusInfoBrowser.UrlArea.onkeydown=function (e) {//获取搜索框值
  102. if(e.keyCode===13){//keycode为13
  103. if(this.value){//如果存在值
  104. if(this.value.match(http) || this.value.match(https)){//判断是否存在http或https
  105. webview.src=this.value;//给webview的src传值
  106. webview.tag.children[0].children[0].style.display = "block";//标签页图标显示
  107. }else {
  108. webview.src='http://'+this.value;//给webview的src传值
  109. webview.tag.children[0].children[0].style.display = "block";//标签页图标显示
  110. }
  111. }
  112. }
  113. };
  114. CampusInfoBrowser.IconLock();//判断是否为https
  115. CampusInfoBrowser.Bind();
  116. ListBody.click();//点击li下的包裹节点
  117. };
  118. CampusInfoBrowser.MouseMenu=function (menu_main,data,callback,e) {//右键菜单事件
  119. // e.preventDefault();
  120. // e.stopPropagation();
  121. var createNode=menu_main.parentNode;//获取第一和参数父元素
  122. var MouseMenuMain=$('.MouseMenuMain');//获取右键菜单事件的ul元素
  123. for(var i=0;i<MouseMenuMain.length;i++){//隐藏右键菜单事件所有
  124. MouseMenuMain[i].style.display='none';
  125. }
  126. document.onmouseup=function () {//鼠标事件后触发
  127. if (e.button === 2) {
  128. menu_main.style.left = e.pageX + -parseFloat(createNode.getBoundingClientRect().left)+createNode.offsetLeft+ 'px';//菜单定位横坐标
  129. menu_main.style.top = e.pageY + -parseFloat(createNode.getBoundingClientRect().top)+createNode.offsetTop+ 'px';//菜单定位纵坐标
  130. menu_main.style.display = 'block';//显示菜单
  131. if(menu_main.getBoundingClientRect().left+menu_main.offsetHeight-createNode.getBoundingClientRect().left>createNode.offsetWidth){//判断距左位置
  132. menu_main.style.left=menu_main.style.left.split('px')[0]-menu_main.offsetWidth+'px';//距左多少
  133. }
  134. if(menu_main.getBoundingClientRect().top+menu_main.offsetHeight-createNode.getBoundingClientRect().top>createNode.offsetHeight){//判断距上位置
  135. menu_main.style.top=menu_main.style.top.split('px')[0]-menu_main.offsetHeight+'px';//距上多少
  136. }
  137. callback(data);//webview传入回调函数
  138. document.onmouseup = null;//清空
  139. }
  140. };
  141. createNode.onclick=createNode.onmousewheel=function () {//执行右键菜单隐藏
  142. for(var i=0;i<MouseMenuMain.length;i++){
  143. MouseMenuMain[i].style.display='none';//隐藏
  144. }
  145. };
  146. };
  147. CampusInfoBrowser.MouseMenuCallBack=function (webview) {//右键菜单回调函数
  148. CampusInfoBrowser.MouseMenuCallBack.GoBack=function () {//返回
  149. webview.goBack();
  150. };
  151. CampusInfoBrowser.MouseMenuCallBack.canGoForward=function () {//前进
  152. webview.goForward();
  153. };
  154. CampusInfoBrowser.MouseMenuCallBack.reload=function () {//刷新
  155. webview.reload();
  156. };
  157. CampusInfoBrowser.MouseMenuCallBack.SourceCode = function () {//查看源代码
  158. CampusInfoBrowser.CreatBrower("view-source:"+CampusInfoBrowser.UrlArea.value);
  159. };
  160. CampusInfoBrowser.MouseMenuCallBack.SaveAs = function(){//保存
  161. function fakeClick(obj) {
  162. var ev = document.createEvent("MouseEvents");
  163. ev.initMouseEvent("click", true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
  164. obj.dispatchEvent(ev);
  165. }
  166. function exportRaw(name, data) {
  167. var urlObject = window.URL || window.webkitURL || window;
  168. var export_blob = new Blob([data]);
  169. var save_link = document.createElementNS("http://www.w3.org/1999/xhtml", "a")
  170. save_link.href = urlObject.createObjectURL(export_blob);
  171. save_link.download = name;
  172. fakeClick(save_link);
  173. }
  174. exportRaw('test.html', 'hello world');
  175. }
  176. CampusInfoBrowser.MouseMenuCallBack.openDevToolsDown = function(){//打开开发者工具
  177. if(webview.isDevToolsOpened()){//判断是否存在
  178. webview.closeDevTools();//关闭开发者工具
  179. }
  180. webview.openDevTools();//打开开发者工具
  181. }
  182. };
  183. CampusInfoBrowser.Action=function(){//过程中的执行
  184. CampusInfoBrowser.BrowersTag.title = $(".Webname");//获取标题标签
  185. var title = CampusInfoBrowser.BrowersTag[0].offsetWidth;//获取title的宽度
  186. for(var i=0;i<CampusInfoBrowser.BrowersTag.title.length;i++){//遍历li标签页
  187. if(title<10){//title小于5
  188. CampusInfoBrowser.BrowersTag.title[i].style.display = "none";//遍历的标题设置隐藏
  189. }else{
  190. CampusInfoBrowser.BrowersTag.title[i].style.display = "block";//遍历的标题设置显示
  191. }
  192. }
  193. }
  194. CampusInfoBrowser.Bind=function(){//绑定
  195. var http = /^(http)/;//http
  196. var https = /^(https)/;//https
  197. CampusInfoBrowser.BrowersTag=$(".BrowerList");//获取选项卡li
  198. // CampusInfoBrowser.tag_close=$(".tag_close");//获取li里的关闭元素
  199. CampusInfoBrowser.BrowerContainer=$(".BrowerContainer");//获取webview
  200. for(var i=0;i<CampusInfoBrowser.BrowersTag.length;i++){//对选项卡及webview进行操作
  201. (function (i) {
  202. CampusInfoBrowser.BrowersTag[i].onclick=function () {
  203. for(var j=0;j<CampusInfoBrowser.BrowersTag.length;j++){
  204. CampusInfoBrowser.BrowersTag[j].className='BrowerList';
  205. CampusInfoBrowser.BrowersTag[0].className='BrowerList Listindex';
  206. CampusInfoBrowser.BrowerContainer[j].style.display='none';
  207. }
  208. CampusInfoBrowser.BrowersTag[i].className+=' BrowerActive';
  209. CampusInfoBrowser.BrowerContainer[i].style.display='block';
  210. CampusInfoBrowser.UrlArea.value=this.data.url;
  211. webview = CampusInfoBrowser.BrowerContainer[i].children[0];
  212. webview.addEventListener("dom-ready", function() {
  213. var canGoForward = $(".icon-right")[0];//获取前进图标
  214. var canGoBack = $(".icon-left")[0];//获取后退图标
  215. var reFresh = $(".refresh")[0];//获取刷新图标
  216. // webview.reloadIgnoringCache();
  217. if(webview.canGoBack()){//判断是否可以后退
  218. canGoBack.style.color = '#5a5a5a';
  219. }else{
  220. canGoBack.style.color = '#d3d3d3';
  221. }
  222. if(webview.canGoForward()){//判断是否可以前进
  223. canGoForward.style.color = '#5a5a5a';
  224. }else{
  225. canGoForward.style.color = '#d3d3d3';
  226. };
  227. if(CampusInfoBrowser.UrlArea.value == ""){
  228. reFresh.style.color = '#d3d3d3';
  229. }else{
  230. reFresh.style.color = '#5a5a5a';
  231. }
  232. });
  233. CampusInfoBrowser.UrlArea.onkeydown=function (e) {//获取搜索框值
  234. if(e.keyCode===13){
  235. if(this.value){
  236. if(this.value.match(http) || this.value.match(https)){//判断是否存在http或https
  237. webview.src=this.value;
  238. webview.tag.children[0].children[0].style.display = "block";
  239. }else {
  240. webview.src='http://'+this.value;
  241. webview.tag.children[0].children[0].style.display = "block";
  242. }
  243. }
  244. }
  245. };
  246. CampusInfoBrowser.IconLock();//判断是否为https
  247. }
  248. })(i)
  249. }
  250. var LIwidth = ((CampusInfoBrowser.NavContainer.offsetWidth - 120)/CampusInfoBrowser.BrowersTag.length)-10;//得到每个li标签页宽度
  251. if(CampusInfoBrowser.BrowersTag.length>=28){//如果如果li标签页大于35
  252. confirm("窗口太多,请关闭一些再使用");//弹出提示
  253. return false;
  254. }
  255. };
  256. CampusInfoBrowser.Init=function () {//初始化
  257. CampusInfoBrowser.UrlArea=$(".bowerSeach input")[0];//获取搜索框
  258. CampusInfoBrowser.NavContainer=$(".bowerCreaterWindow")[0];//获取标签页ul
  259. CampusInfoBrowser.AddButton=$(".BrowwerAdd")[0];//获取新建标签页按钮
  260. CampusInfoBrowser.BrowersButtom=$("#bowerMenu")[0];//获取打开菜单
  261. CampusInfoBrowser.MouseMenuMain=$("#CampusInfoBrowserMenu")[0];//获取右键菜单
  262. CampusInfoBrowser.AddButton.onclick= function (){//点击新建标签页
  263. CampusInfoBrowser.CreatBrower('');
  264. var canGoForward = $(".icon-right")[0];//获取前进图标
  265. var canGoBack = $(".icon-left")[0];//获取后退图标
  266. var reFresh = $(".refresh")[0];//获取刷新图标
  267. canGoBack.style.color = '#d3d3d3';
  268. canGoForward.style.color = '#d3d3d3';
  269. reFresh.style.color = '#d3d3d3';
  270. if(CampusInfoBrowser.UrlArea.value === ""){
  271. this.previousSibling.children[0].children[1].innerHTML = "新标签页";
  272. // this.previousSibling.children[0].removeChild(this.previousSibling.children[0].children[0]);
  273. this.previousSibling.children[0].children[0].style.display = "none";
  274. }
  275. };
  276. CampusInfoBrowser.BrowersButtom.onclick=function (e) {//点击菜单
  277. e.preventDefault();
  278. CampusInfoBrowser.MenuMain.popup(remote.getCurrentWindow());//打开创建的菜单
  279. };
  280. CampusInfoBrowser.MenuMain = new Menu();//创建菜单
  281. CampusInfoBrowser.MenuMain_template=[
  282. {
  283. label: '关于我们 ',
  284. role: '关于我们',
  285. },
  286. {
  287. label: '反馈 ',
  288. role: '反馈',
  289. },
  290. {
  291. label: '历史记录 ',
  292. role: '历史记录',
  293. },
  294. {
  295. label: '清除缓存 ',
  296. role: '清除缓存',
  297. },
  298. {
  299. role: 'close',
  300. submenu: [
  301. {role: 'close'}
  302. ]
  303. }
  304. ];//创建菜单项数组的数组
  305. CampusInfoBrowser.MenuMain = Menu.buildFromTemplate(CampusInfoBrowser.MenuMain_template);
  306. Menu.setApplicationMenu(CampusInfoBrowser.MenuMain);//创建应用菜单
  307. CampusInfoBrowser.IconLock = function(){//判断是否为https
  308. var http = /^(http)/;//http
  309. var https = /^(https)/;//https
  310. if(CampusInfoBrowser.UrlArea.value.search(https)!=-1){//判断搜索框是否有https
  311. $(".bowerSeach span")[0].style.color = '#035816';
  312. }else {
  313. $(".bowerSeach span")[0].style.color = '#d3d3d3';
  314. }
  315. }
  316. window.onresize=function (e) {
  317. Array.prototype.forEach.call($("webview"), function (elm) {
  318. elm.style.width=elm.style.height='100%';//给webview设置100%宽高
  319. });
  320. };
  321. setInterval('CampusInfoBrowser.Action()',1000);
  322. CampusInfoBrowser.CreatBrower('https://www.baidu.com');//开始进入一个页面
  323. }();