browser.js 17 KB

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