browser.js 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871
  1. const url = require('url');
  2. const {ipcRenderer} = require('electron');
  3. let ipc=require('electron').ipcRenderer;
  4. /*注册命名空间*/
  5. let US_Browser=[];
  6. let BrowersWindow=require('electron').remote.getCurrentWindow();
  7. Namespace.register("US_Browser");
  8. /*浏览器函数*/
  9. US_Browser.CreatBrower=function (address,flag) {//创建窗口,url,是否为用户选择文件
  10. let http = /^(http)/;
  11. let https = /^(https)/;
  12. let www=/^(www)/;
  13. let m=/^(m)/;
  14. let li=$$("li", {//创建ul下的li
  15. "className": "BrowerList"
  16. }, US_Browser.NavContainer);
  17. let ListBody=$$("div", {//创建li下的div
  18. "className": "BrowerListBody","ripple":""
  19. }, li);
  20. US_Browser.NavContainer.insertBefore(li,US_Browser.AddButton);//把新建标签页按钮追加到ul的li下
  21. li.data={//传窗口地址
  22. "url":address,
  23. "name":null,
  24. "favicons":'public/img/tray/logo.png'
  25. };
  26. li.data={//传窗口地址
  27. "url":address,
  28. "name":null,
  29. "favicons":'public/img/tray/logo.png'
  30. };
  31. ListBody.tag_favicon=$$("img", {//标签页图标
  32. "className": "tag_favicon", "draggable":"false", "alt":""
  33. }, ListBody);
  34. ListBody.tag_favicon.style.display=(address&&address!==null)?"block":"none";
  35. ListBody.tag_favicon.onerror=function () {//不存在时显示的标签页图标
  36. this.src='public/img/tray/logo.png';
  37. };
  38. ListBody.Webname=$$("p", {//标签页标题
  39. "className": "Webname","innerHTML":address?"正在加载":"新建标签","draggable":"false"
  40. }, ListBody);
  41. ListBody.tag_close=$$("i", {//标题页关闭按钮
  42. "className":"icon-cancel tag_close"
  43. }, ListBody);
  44. let BrowerContainer=$$("div", {"className":"BrowerContainer"},$("body")[0]);//装载webview
  45. let webview=$$("webview", {//创建webview
  46. "allowpopups":"", "autosize":"on","preload":"./public/js/preload.js"
  47. }, BrowerContainer);
  48. li.onmousedown=function(e){
  49. if(e.button===1){
  50. ListBody.tag_close.click(0)
  51. }
  52. };
  53. webview.setAttribute('plugins','');
  54. webview.state=(address&&address!==null)?false:true;
  55. webview.tag=li;//把li赋给webview标签
  56. webview.addEventListener("new-window",function (e) {//访客页面尝试打开新的浏览器窗口时触发。
  57. US_Browser.BrowersTag=$(".BrowerList");//获取选项卡li
  58. let LIwidth = ((US_Browser.NavContainer.offsetWidth - 120)/US_Browser.BrowersTag.length)-10;//得到每个li标签页宽度
  59. if(US_Browser.BrowersTag.length>=30){//如果如果li标签页大于35
  60. confirm("窗口太多,请关闭一些再使用");//弹出提示
  61. return false;
  62. }
  63. const protocol=url.parse(e.url).protocol;
  64. if(protocol==='http:'||protocol==='https:'||protocol==="about:blank"){
  65. US_Browser.CreatBrower(e.url);//系统的默认浏览器中打开新的URL
  66. }
  67. });
  68. webview.addEventListener("page-favicon-updated",function (e) {//当页面收到图标网址时触发
  69. ListBody.tag_favicon.src=e.favicons[0];
  70. this.tag.data.favicons=e.favicons[0];
  71. });
  72. webview.addEventListener('will-navigate',function (e) {//导航跳转时触发
  73. this.tag.data.url=e.url;
  74. if(webview===US_Browser.SelecteWebview) {
  75. US_Browser.Head[5].value=e.url;
  76. }
  77. });
  78. webview.addEventListener('did-navigate',function (e) {//导航完成时触发
  79. this.tag.data.url=e.url;
  80. if(webview===US_Browser.SelecteWebview) {
  81. US_Browser.Head[5].value=e.url;
  82. }
  83. ListBody.Webname.innerHTML=this.getTitle();
  84. });
  85. webview.addEventListener('did-navigate-in-page',function (e) {//导航完成时触发
  86. this.tag.data.url=e.url;
  87. US_Browser.Head[5].value=e.url;
  88. US_Browser.CheckState(this);
  89. });
  90. webview.addEventListener('page-title-updated',function (e) {//导航完成时触发
  91. this.tag.data.name=e.title;
  92. ListBody.Webname.innerHTML=e.title;
  93. });
  94. webview.addEventListener('dom-ready',function (e) {//加载完成webview后执行
  95. ListBody.Webname.innerHTML=this.getTitle();//更改webview的title
  96. this.tag.data.name=this.getTitle();
  97. US_Browser.CheckState(this);
  98. this.focus();
  99. this.getWebContents().focus();
  100. US_Browser.isready = true
  101. });
  102. webview.addEventListener('did-get-response-details',function (e) {
  103. US_Browser.LoadTips.innerHTML='正在请求:'+e.originalURL;
  104. });
  105. webview.addEventListener('did-start-loading',function (e) {
  106. ListBody.tag_favicon.src='';
  107. US_Browser.IsLoading(this,true);
  108. });
  109. webview.addEventListener('did-finish-load',function (e) {
  110. US_Browser.IsLoading(this,false);
  111. US_Browser.LocalStorage(this);
  112. });
  113. webview.addEventListener('did-frame-finish-load',function (e) {
  114. US_Browser.IsLoading(this,false)
  115. });
  116. webview.addEventListener('did-stop-loading',function (e) {
  117. US_Browser.IsLoading(this,false)
  118. });
  119. webview.addEventListener('load-commit',function (e) {
  120. US_Browser.LoadTips.innerHTML=e.url;
  121. US_Browser.IsLove(e.url)
  122. });
  123. webview.addEventListener('found-in-page', function(e) {
  124. if (e.result.finalUpdate) {
  125. US_Browser.Elm[1].innerHTML=e.result.activeMatchOrdinal+'/'+e.result.matches;
  126. US_Browser.Elm[2].onclick=function () {
  127. };
  128. US_Browser.Elm[3].onclick=function () {
  129. US_Browser.SelecteWebview.findInPage(US_Browser.Elm[0].value)
  130. };
  131. }
  132. });
  133. webview.addEventListener('did-fail-load',function (e) {
  134. if (e.errorCode === -3) {
  135. return
  136. }
  137. US_Browser.SelecteWebview.src = './blank.html'
  138. });
  139. /*webview.addEventListener('did-fail-load',function (e) {
  140. if(webview.state) {
  141. let msg = e.errorDescription;
  142. let old_url = US_Browser.Head[5].value;
  143. US_Browser.SelecteWebview.src = 'error.html?msg=' + msg + '&url=' + this.src;
  144. US_Browser.Head[5].value = old_url;
  145. }
  146. });*/
  147. webview.fullSrceen=false;
  148. webview.FindKey=false;
  149. webview.onmousedown=function (e) {//webview鼠标事件
  150. US_Browser.US_OpenLinkInNew.style.display=US_Browser.US_OpenImgInNew.style.display='none';
  151. ipcRenderer.on('elm',function (e,msg) {
  152. US_Browser.MouseData=msg;
  153. if(US_Browser.MouseData) {
  154. let tag = US_Browser.MouseData.tag;
  155. if (tag === 'A') {
  156. US_Browser.US_OpenLinkInNew.style.display = 'block';
  157. US_Browser.US_OpenLinkInNew.onclick = function () {
  158. US_Browser.CreatBrower(US_Browser.MouseData.href)
  159. };
  160. } else if (tag === 'IMG') {
  161. US_Browser.US_OpenImgInNew.style.display = 'block';
  162. US_Browser.US_OpenImgInNew.onclick = function () {
  163. US_Browser.CreatBrower(US_Browser.MouseData.src)
  164. };
  165. } else {
  166. US_Browser.US_OpenLinkInNew.style.display = US_Browser.US_OpenImgInNew.style.display = 'none';
  167. }
  168. }
  169. });
  170. US_Browser.MouseMenu(US_Browser.MouseMenuMain,this,e);//右键显示创建应用菜单
  171. };
  172. ListBody.tag_close.onclick=function () {//点击标题页关闭按钮
  173. event.stopPropagation();
  174. let closeArr = $(".tag_close");
  175. closeArr[0].index = 0;//设置li下第一个关闭图标的index
  176. if(ListBody.tag_close.index === 0){
  177. webview.tag.nextSibling.onclick();//点击当前li下一个
  178. }else{
  179. webview.tag.previousSibling.onclick();//点击当前li上一个
  180. }
  181. if(ListBody.offsetWidth<50){
  182. ListBody.Webname.style.display = "none";
  183. }else{
  184. ListBody.Webname.style.display = "block";
  185. }
  186. US_Browser.NavContainer.removeChild(webview.tag);//移除当前li
  187. document.body.removeChild(BrowerContainer);//移除当前webview
  188. };
  189. webview.src=address;//给webview的src传值
  190. US_Browser.Bind();
  191. ListBody.click();//点击li下的包裹节点
  192. if(flag){
  193. let pattern = new RegExp("^[a-zA-Z]:/[a-zA-Z_0-9//]*");
  194. if(pattern.test(address)){
  195. webview.src = "file:///"+address;
  196. }else {
  197. if (address.match(http) || address.match(https)) {//判断是否存在http或https
  198. webview.src = address;//给webview的src传值
  199. } else if (this.value.match(www) || this.value.match(m)) {
  200. webview.src = 'http://' + this.value;//给webview的src传值
  201. } else {
  202. webview.src = 'https://www.baidu.com/s?cl=3&wd=' + this.value;//给webview的src传值
  203. }
  204. }
  205. webview.tag.getElementsByTagName('img')[0].style.display = "block";//标签页图标显示
  206. }
  207. };//创建一个新的浏览器选项卡
  208. US_Browser.MouseMenu=function (menu_main,data,e,flag) {//右键菜单事件
  209. let createNode=document.body;//获取第一和参数父元素
  210. let MouseMenuMain=$('.MouseMenuMain');//获取右键菜单事件的ul元素
  211. US_Browser.MouseMenuMainer.style.display='none';
  212. $('#US_BookmarkSet')[0].style.display = 'none'
  213. for(let i=0;i<MouseMenuMain.length;i++){//隐藏右键菜单事件所有
  214. MouseMenuMain[i].style.display='none';
  215. }
  216. document.onmouseup=function () {//鼠标事件后触发
  217. if (e.button === 2||flag) {
  218. menu_main.style.display = 'block';//显示菜单
  219. if (!flag) {
  220. menu_main.style.left = e.pageX + -parseFloat(createNode.getBoundingClientRect().left) + createNode.offsetLeft + 'px';//菜单定位横坐标
  221. menu_main.style.top = e.pageY + -parseFloat(createNode.getBoundingClientRect().top) + createNode.offsetTop + 'px';//菜单定位纵坐标
  222. if (menu_main.getBoundingClientRect().left + menu_main.offsetWidth > createNode.offsetWidth) {//判断距左位置
  223. menu_main.style.left = menu_main.style.left.split('px')[0] - menu_main.offsetWidth -30+ 'px';//距左多少
  224. }
  225. if (menu_main.getBoundingClientRect().top + menu_main.offsetHeight> createNode.offsetHeight) {//判断距上位置
  226. menu_main.style.top = menu_main.style.top.split('px')[0] - menu_main.offsetHeight + 'px';//距上多少
  227. }
  228. }
  229. document.onmouseup = null;//清空
  230. }
  231. };
  232. menu_main.onclick=createNode.onmousewheel=function () {//执行右键菜单隐藏
  233. for(let i=0;i<MouseMenuMain.length;i++){
  234. MouseMenuMain[i].style.display='none';//隐藏
  235. }
  236. };
  237. };//右键菜单函数
  238. US_Browser.CheckState=function(webview){
  239. if(webview.canGoBack()){//判断是否可以后退
  240. US_Browser.Head[0].style.color = '#5a5a5a';
  241. US_Browser.MenuBack.removeAttribute('style');
  242. }else{
  243. US_Browser.Head[0].style.color = '#d3d3d3';
  244. US_Browser.MenuBack.style.color='#adadad';
  245. }
  246. if(webview.canGoForward()){//判断是否可以前进
  247. US_Browser.Head[1].style.color = '#5a5a5a';
  248. US_Browser.MenuGo.removeAttribute('style');
  249. }else{
  250. US_Browser.Head[1].style.color = '#d3d3d3';
  251. US_Browser.MenuGo.style.color='#adadad';
  252. }
  253. if(!US_Browser.Head[5].value.length){
  254. US_Browser.Head[2].style.color = '#d3d3d3';
  255. }else{
  256. US_Browser.Head[2].style.color = '#5a5a5a';
  257. }
  258. };//检查标签是否可后退前进
  259. US_Browser.LocalStorage=function(webview){
  260. let time = (new Date()).valueOf();
  261. let today = new Date().toLocaleDateString();
  262. let datas={
  263. url:webview.src,
  264. title:webview.tag.data.name,
  265. favicons:webview.tag.data.favicons,
  266. data:new Date().toLocaleString()+' 星期'+'日一二三四五六'.charAt(new Date().getDay()),
  267. time:new Date().toLocaleTimeString(),
  268. key:time
  269. };
  270. if(localStorage[today]){
  271. let aa = JSON.parse(localStorage[today]);
  272. let bb = JSON.parse(JSON.stringify(datas));
  273. aa.push(bb);
  274. let Storage = JSON.stringify(aa);
  275. localStorage.removeItem(today);
  276. localStorage.setItem(today, Storage);
  277. }else{
  278. localStorage.setItem(today,[]);
  279. localStorage[today]="["+JSON.stringify(datas)+"]";
  280. }
  281. };//本地存储操作
  282. US_Browser.IconLock = function(){//判断是否为https
  283. if(US_Browser.Head[5].value.indexOf('https')>-1){//判断搜索框是否有https
  284. US_Browser.LockIcon.style.color = '#035816';
  285. }else {
  286. US_Browser.LockIcon.style.color = '#d3d3d3';
  287. }
  288. };
  289. /*浏览器按钮函数*/
  290. US_Browser.about=function () {
  291. ipc.send('AboutUsW-show');
  292. };
  293. US_Browser.ShowHistory=function(){
  294. ipc.send('BrowserHistory-show');
  295. };
  296. US_Browser.Feedback=function(){
  297. ipc.send('BrowserFeedback-show');
  298. };
  299. US_Browser.ClearCache=function(){
  300. localStorage.clear();
  301. };
  302. US_Browser.CreatBrowerWindow=function(){
  303. ipc.send('newBrowersWindow')
  304. };
  305. US_Browser.Print=function(){
  306. US_Browser.SelecteWebview.print();
  307. };
  308. US_Browser.DevTools=function(){
  309. if(US_Browser.SelecteWebview.isDevToolsOpened()){//判断是否存在
  310. US_Browser.SelecteWebview.closeDevTools();//关闭开发者工具
  311. }
  312. US_Browser.SelecteWebview.openDevTools();//打开开发者工具
  313. };
  314. US_Browser.SourceCode = function () {//查看源代码
  315. US_Browser.CreatBrower("view-source:"+US_Browser.Head[5].value);
  316. };
  317. US_Browser.Exit=function(){
  318. BrowersWindow.close();
  319. // ipc.send('window-all-closed');
  320. };
  321. US_Browser.goBack = function(){//执行后退
  322. US_Browser.SelecteWebview.goBack();
  323. };
  324. US_Browser.goForward = function(){//执行前进
  325. US_Browser.SelecteWebview.goForward();
  326. };
  327. US_Browser.CampusInfo=function(){
  328. ipc.send('CampusInfo')
  329. };
  330. US_Browser.reFresh = function(){//执行刷洗
  331. if(US_Browser.SelecteWebview.state) {
  332. US_Browser.SelecteWebview.reload();
  333. }
  334. };
  335. US_Browser.Stop=function(){
  336. US_Browser.SelecteWebview.stop();
  337. };
  338. US_Browser.IsLoading=function(webview,flag){
  339. if(flag) {
  340. if (webview === US_Browser.SelecteWebview) {
  341. US_Browser.Head[2].className = 'icon-cancel';
  342. webview.state=false;
  343. } else {
  344. US_Browser.Head[2].className = 'icon-cw';
  345. webview.state=true;
  346. }
  347. US_Browser.LoadTips.style.display='block';
  348. }else {
  349. if(webview===US_Browser.SelecteWebview) {
  350. US_Browser.Head[2].className='icon-cw';
  351. webview.state=true;
  352. }else{
  353. US_Browser.Head[2].className='icon-cancel';
  354. webview.state=false;
  355. }
  356. US_Browser.LoadTips.innerHTML='';
  357. US_Browser.LoadTips.style.display='none';
  358. }
  359. };
  360. /*浏览器初始化*/
  361. US_Browser.IpcBind=function(){
  362. ipcRenderer.on('flag', function(event, message){//接收用户指定的文件
  363. if(message==='-1'){
  364. US_Browser.CreatBrower('http://client.1473.cn/homepage.html');//开始进入一个页面
  365. }
  366. });
  367. ipcRenderer.on('url', function(event, message){//接收用户指定的文件
  368. if(message){
  369. US_Browser.CreatBrower(message,true);//打开用户请求的页面
  370. }
  371. });
  372. ipcRenderer.on('open-history', function(event, message){//接收历史记录地址
  373. if(message){
  374. US_Browser.CreatBrower(message,true);//打开用户请求的页面
  375. }
  376. });
  377. ipcRenderer.on('download-progress',function (event,message) {
  378. console.log(message)
  379. });
  380. ipcRenderer.on('geturl',function (event,message) {
  381. US_Browser.CreatBrower(message);//开始进入一个页面
  382. });
  383. ipcRenderer.on('size',function (event,message) {
  384. if(message>0){
  385. US_Browser.ControlButton[1].className='icon-window-restore';
  386. US_Browser.NavContainer.style.padding = "5px 0 0";
  387. US_Browser.RightMenu.style.top='71px';
  388. US_Browser.BrowerContainer.each(function (index,elm) {
  389. elm.style.top='71px';
  390. elm.style.height='calc(100% - 70px)';
  391. })
  392. }else {
  393. US_Browser.ControlButton[1].className='icon-window-maximize';
  394. US_Browser.NavContainer.style.padding = "15px 0 0";
  395. US_Browser.RightMenu.style.top='81px';
  396. US_Browser.BrowerContainer.each(function (index,elm) {
  397. elm.style.top='81px';
  398. elm.style.height='calc(100% - 80px)';
  399. })
  400. }
  401. })
  402. };//ipc通信绑定
  403. US_Browser.Bind=function(){//绑定
  404. US_Browser.BrowerListBody = $(".BrowerListBody");
  405. US_Browser.BrowersTag=$(".BrowerList");//获取选项卡li
  406. US_Browser.BrowerContainer=$(".BrowerContainer");//获取webview
  407. US_Browser.SelecteWebview=US_Browser.BrowerContainer[0].children[0];
  408. US_Browser.US_OpenLinkInNew=$(".US_OpenLinkInNew")[0];
  409. US_Browser.US_OpenImgInNew=$(".US_OpenImgInNew")[0];
  410. for(let i=0;i<US_Browser.BrowersTag.length;i++){//对选项卡及webview进行操作
  411. (function (i) {
  412. US_Browser.BrowersTag[i].onclick=function () {
  413. for(let j=0;j<US_Browser.BrowersTag.length;j++){
  414. US_Browser.BrowersTag[j].className='BrowerList';
  415. US_Browser.BrowersTag[0].className='BrowerList Listindex';
  416. US_Browser.BrowerContainer[j].style.opacity='0';
  417. US_Browser.BrowerContainer[j].style.zIndex='1';
  418. US_Browser.BrowerContainer[j].style.left='-100%';
  419. }
  420. US_Browser.BrowersTag[i].className+=' BrowerActive';
  421. US_Browser.BrowerContainer[i].style.opacity='1';
  422. US_Browser.BrowerContainer[i].style.zIndex='1';
  423. US_Browser.BrowerContainer[i].style.left='0';
  424. US_Browser.Head[5].value=this.data.url;
  425. US_Browser.SelecteWebview=US_Browser.BrowerContainer[i].children[0];
  426. if(US_Browser.SelecteWebview.FindKey){
  427. US_Browser.FindContainer.style.display='block';
  428. US_Browser.Elm[0].value=US_Browser.SelecteWebview.FindKey;
  429. US_Browser.SelecteWebview.findInPage(US_Browser.Elm[0].value);
  430. }else{
  431. US_Browser.Elm[4].click();
  432. }
  433. if(US_Browser.SelecteWebview.state){
  434. US_Browser.Head[2].className='icon-cw';
  435. if(US_Browser.SelecteWebview.src) {
  436. US_Browser.CheckState(US_Browser.SelecteWebview);
  437. }else{
  438. US_Browser.Head[0].style.color = '#d3d3d3';
  439. US_Browser.Head[1].style.color = '#d3d3d3';
  440. US_Browser.Head[2].style.color = '#d3d3d3';
  441. US_Browser.MenuBack.style.color='#adadad';
  442. US_Browser.MenuGo.style.color='#adadad';
  443. }
  444. }else{
  445. US_Browser.Head[2].className='icon-cancel';
  446. }
  447. US_Browser.RightMenu.style.display='none';
  448. US_Browser.IconLock();//判断是否为https
  449. }
  450. })(i);
  451. }
  452. };//标签页事件绑定
  453. US_Browser.Find=function(){
  454. if(US_Browser.FindContainer.offsetWidth) {
  455. US_Browser.FindContainer.style.display = 'none';
  456. US_Browser.Elm[0].blur();
  457. }else {
  458. US_Browser.FindContainer.style.display = 'block';
  459. US_Browser.Elm[0].value = '';
  460. US_Browser.Elm[1].innerHTML = '0/0';
  461. US_Browser.Elm[0].focus();
  462. }
  463. };//开启关闭查找函数;
  464. US_Browser.SaveAs=function(){
  465. US_Browser.SelecteWebview.getWebContents().savePage(US_Browser.Head[5].value,'HTMLComplete',function () {
  466. })
  467. };//另存为喊
  468. US_Browser.HeadBind=function(){
  469. let http = /^(http)/;
  470. let https = /^(https)/;
  471. let www=/^(www)/;
  472. let m=/^(m)/;
  473. let isBig=true;//窗口放大还原标示
  474. US_Browser.AddButton=$(".BrowwerAdd")[0];//获取新建标签页按钮
  475. US_Browser.ControlButton=$(".browerHeaderControl button");
  476. US_Browser.ControlButton[0].onclick=function(){//最小化
  477. BrowersWindow.minimize();
  478. };
  479. US_Browser.ControlButton[1].onclick=function(){//最大化
  480. if(isBig){
  481. ipc.send('show-window');
  482. BrowersWindow.maximize();
  483. this.className='icon-window-restore';
  484. US_Browser.NavContainer.style.padding = "5px 0 0";
  485. US_Browser.RightMenu.style.top='71px';
  486. US_Browser.BrowerContainer.each(function (index,elm) {
  487. elm.style.top='70px';
  488. elm.style.height='calc(100% - 70px)';
  489. })
  490. }else{
  491. BrowersWindow.restore();
  492. this.className='icon-window-maximize';
  493. US_Browser.NavContainer.style.padding = "15px 0 0";
  494. US_Browser.RightMenu.style.top='81px';
  495. US_Browser.BrowerContainer.each(function (index,elm) {
  496. elm.style.top='81px';
  497. elm.style.height='calc(100% - 80px)';
  498. })
  499. }
  500. isBig=!isBig;
  501. };
  502. US_Browser.ControlButton[2].onclick=function(){//关闭窗口
  503. US_Browser.Exit();
  504. };
  505. US_Browser.Head=$(".BrowerHead *");
  506. US_Browser.Head[0].onclick=function () {
  507. US_Browser.goBack()
  508. };
  509. US_Browser.Head[1].onclick=function () {
  510. US_Browser.goForward()
  511. };
  512. US_Browser.Head[2].onclick=function () {
  513. if(this.className==='icon-cw') {
  514. US_Browser.reFresh()
  515. }else{
  516. US_Browser.Stop();
  517. this.className='icon-cw';
  518. }
  519. };
  520. US_Browser.LockIcon=US_Browser.Head[4];
  521. US_Browser.Head[5].tabIndex=-1;
  522. US_Browser.Head[5].onkeydown=function (e) {//获取搜索框值
  523. if(e.keyCode===13){//keycode为13
  524. let secondary = /([a-z0-9--]{1,200})\.([a-z]{2,10})(\.[a-z]{2,10})?/
  525. let file = /^(file|ftp)/
  526. if(this.value.length){//如果存在值
  527. if(this.value.match(http) || this.value.match(https)){//判断是否存在http或https
  528. US_Browser.SelecteWebview.src=this.value;//给webview的src传值
  529. }else if(this.value.match(www)||this.value.match(m)){
  530. US_Browser.SelecteWebview.src='http://'+this.value;//给webview的src传值
  531. }else if (file.test(this.value)) {
  532. US_Browser.SelecteWebview.src = this.value
  533. } else if (secondary.test(this.value)) {
  534. US_Browser.SelecteWebview.src = 'http://' + this.value
  535. } else {
  536. US_Browser.SelecteWebview.src='https://www.baidu.com/s?cl=3&wd='+this.value;//给webview的src传值
  537. }
  538. US_Browser.SelecteWebview.tag.getElementsByTagName('img')[0].style.display = "block";//标签页图标显示
  539. }
  540. this.blur();
  541. }
  542. };
  543. US_Browser.Head[5].onfocus=function(e){
  544. this.select();
  545. };
  546. US_Browser.Head[6].onmousedown=function (event) {//点击菜单
  547. US_Browser.MouseMenu(US_Browser.RightMenu,this,event,true);//右键显示创建应用菜单
  548. };
  549. US_Browser.AddButton.onclick= function (){//点击新建标签页
  550. US_Browser.BrowersTag=$(".BrowerList");//获取选项卡li
  551. if(US_Browser.BrowersTag.length>=30){//如果如果li标签页大于35
  552. alert("窗口太多,请关闭一些再使用");//弹出提示
  553. return false;
  554. }
  555. US_Browser.CreatBrower(null);
  556. US_Browser.Head[5].focus();
  557. US_Browser.RightMenu.style.display='none';
  558. US_Browser.MouseMenuMainer.style.display='none';
  559. };
  560. US_Browser.RightMenubtn.onclick = function () {
  561. if (window.localStorage.getItem('arr') === null) {
  562. window.localStorage.setItem('arr', `[{"url": "${US_Browser.SelecteWebview.src}","icon": "${$('.BrowerActive')[0].children[0].children[0].src}", "title": "${US_Browser.SelecteWebview.getTitle()}"}]`)
  563. } else if (window.localStorage.getItem('arr').indexOf(US_Browser.SelecteWebview.src) != -1) {
  564. let b = JSON.parse(window.localStorage.getItem('arr'))
  565. b.map((i, j) => {
  566. if (i.url === US_Browser.SelecteWebview.src) {
  567. let arr = JSON.parse(window.localStorage.getItem('arr'))
  568. arr.splice(j, 1);
  569. window.localStorage.setItem('arr', JSON.stringify(arr))
  570. $('#LoveWebSize')[0].className = 'fa fa-heart-o'
  571. $('.MouseMenuMainer')[0].removeChild($('.MouseMenuMainer')[0].children[j])
  572. $('#FavoritesUl')[0].removeChild($('#FavoritesUl')[0].children[j])
  573. }
  574. })
  575. return
  576. } else {
  577. let c = JSON.parse(window.localStorage.getItem('arr'))
  578. c.push({
  579. "url": US_Browser.SelecteWebview.src,
  580. "icon": $('.BrowerActive')[0].children[0].children[0].src,
  581. "title": US_Browser.SelecteWebview.getTitle()
  582. })
  583. window.localStorage.setItem('arr', JSON.stringify(c))
  584. }
  585. US_Browser.xuanrang(US_Browser.SelecteWebview.src, $('.BrowerActive')[0].children[0].children[0].src, US_Browser.SelecteWebview.getTitle())
  586. $('#LoveWebSize')[0].className = 'fa fa-heart'
  587. US_Browser.drag()
  588. }
  589. US_Browser.Loveitem = () => {
  590. if (window.localStorage.getItem('arr') === null){
  591. let data = [
  592. {
  593. "url":"http://www.1473.cn/",
  594. "icon":"./public/img/tray/logo.png",
  595. "title":"云端 - 1473.cn"
  596. }
  597. ]
  598. data.map((i, j) => {
  599. US_Browser.xuanrang(i.url, i.icon, i.title)
  600. window.localStorage.setItem('arr', `[{"url": "${i.url}","icon": "${i.icon}", "title": "${i.title}"}]`)
  601. })
  602. return
  603. }
  604. JSON.parse(window.localStorage.getItem('arr')).map((i, j) => {
  605. US_Browser.xuanrang(i.url, i.icon, i.title)
  606. })
  607. }
  608. US_Browser.IsLove = (msg) => {
  609. if (window.localStorage.getItem('arr') === null){ return }
  610. if (window.localStorage.getItem('arr').indexOf(msg) != -1) {
  611. $('#LoveWebSize')[0].className = 'fa fa-heart'
  612. } else {
  613. $('#LoveWebSize')[0].className = 'fa fa-heart-o'
  614. }
  615. }
  616. US_Browser.gotoLove = (msg) => {
  617. US_Browser.SelecteWebview.src = msg
  618. US_Browser.MouseMenuMainer.style.display = 'none'
  619. }
  620. US_Browser.xuanrang = (url, icon, title) => {
  621. $('#FavoritesUl')[0].innerHTML += `<li class="column" draggable="true" data='${url}'>
  622. <div onclick="US_Browser.gotoLove('${url}')">
  623. <img class="tag_favicon" draggable="true" style="display: block;" src=${icon}>
  624. <p class="Webname" draggable="true"><nobr>${title}</nobr></p>
  625. </div>
  626. </li>`
  627. $('.MouseMenuMainer')[0].innerHTML += `<li class="column" draggable="true" data='${url}'>
  628. <div onclick="US_Browser.gotoLove('${url}')">
  629. <img class="tag_favicon" draggable="true" style="display: block;" src=${icon}>
  630. <p class="Webname" draggable="true">${title}</p>
  631. </div>
  632. </li>`
  633. }
  634. US_Browser.FavoritesMore.onclick = () => {
  635. US_Browser.MouseMenuMainer.style.display = 'block'
  636. }
  637. window.addEventListener('dragleave',function (e) {
  638. e.preventDefault();
  639. return false;
  640. });
  641. window.addEventListener('dragover',function (e) {
  642. e.preventDefault();
  643. return false;
  644. });
  645. window.addEventListener('dragenter',function (e) {
  646. e.preventDefault();
  647. return false;
  648. });
  649. window.addEventListener( "drop", function (e) {
  650. e.preventDefault();
  651. return false;
  652. }, false );
  653. document.body.onkeydown=function(evt){
  654. evt = (evt) ? evt : window.event;
  655. if(evt.keyCode===112 ){
  656. US_Browser.about();
  657. }else if(evt.keyCode===114||((evt.ctrlKey)&&(evt.keyCode===70))||((evt.ctrlKey)&&(evt.keyCode===71))) {//查找
  658. US_Browser.Find();
  659. }else if((evt.keyCode===116)||((evt.ctrlKey)&&(evt.keyCode===82))){//重新加载、刷新
  660. if(US_Browser.Head[2].className==='icon-cw') {
  661. US_Browser.reFresh()
  662. }else{
  663. US_Browser.Stop();
  664. US_Browser.Head[2].className='icon-cw';
  665. }
  666. }else if((evt.ctrlKey)&&(evt.keyCode===72)){//历史记录
  667. US_Browser.ShowHistory();
  668. }else if((evt.ctrlKey)&&(evt.keyCode===80)){//打印
  669. US_Browser.Print();
  670. }else if((evt.ctrlKey)&&(evt.keyCode===84)){//打开一个新标签页
  671. US_Browser.CreatBrower(null);
  672. }else if((evt.ctrlKey)&&(evt.keyCode===78)){//打开一个新的窗口
  673. US_Browser.CreatBrowerWindow('');
  674. }else if((evt.ctrlKey)&&(evt.keyCode===85)){//查看网页源代码
  675. US_Browser.SourceCode();
  676. }else if((evt.altKey)&&(evt.keyCode===39)){//前进
  677. US_Browser.goForward();
  678. }else if((evt.altKey)&&(evt.keyCode===37)){//后退
  679. US_Browser.goBack();
  680. }else if(evt.keyCode===117){//选择地址栏
  681. if(document.activeElement.id===US_Browser.Head[5].id){
  682. US_Browser.Head[5].blur();
  683. }else{
  684. US_Browser.Head[5].focus();
  685. US_Browser.Head[5].select();
  686. }
  687. }else if(evt.keyCode===121){//F10菜单
  688. US_Browser.RightMenu.style.display=US_Browser.RightMenu.offsetWidth?'none':'block';
  689. }else if(evt.keyCode===122){//F11全屏
  690. if(US_Browser.SelecteWebview.fullSrceen){
  691. if (document.exitFullscreen) {
  692. document.exitFullscreen();
  693. }
  694. else if (document.mozCancelFullScreen) {
  695. document.mozCancelFullScreen();
  696. }
  697. else if (document.webkitCancelFullScreen) {
  698. document.webkitCancelFullScreen();
  699. }
  700. else if (document.msExitFullscreen) {
  701. document.msExitFullscreen();
  702. }
  703. US_Browser.SelecteWebview.fullSrceen=false;
  704. }else{
  705. US_Browser.SelecteWebview.webkitRequestFullscreen();
  706. US_Browser.SelecteWebview.fullSrceen=true
  707. }
  708. }else if (evt.keyCode===123||((evt.ctrlKey)&&(evt.shiftKey)&&(evt.keyCode===73))) {//F12、ctrl+shift+i
  709. US_Browser.DevTools();
  710. }else if((evt.ctrlKey)&&(evt.keyCode===87)) {//关闭标签页
  711. if ($(".BrowerContainer").length > 0) {
  712. US_Browser.SelecteWebview.tag.children[0].tag_close.click();
  713. }
  714. }else if(((evt.ctrlKey)&&(evt.shiftKey)&&(evt.keyCode===81))){//退出浏览器
  715. US_Browser.Exit();
  716. }else if(((evt.ctrlKey)&&(evt.shiftKey)&&(evt.keyCode===46))){
  717. US_Browser.ClearCache();
  718. }else if(((evt.altKey)&&(evt.shiftKey)&&(evt.keyCode===73))){
  719. US_Browser.Feedback();
  720. }else if(((evt.altKey)&&(evt.shiftKey)&&(evt.keyCode===83))){
  721. US_Browser.CampusInfo();
  722. }
  723. };
  724. US_Browser.drag = function() {
  725. US_Browser.columns = document.querySelectorAll('#FavoritesUl .column');
  726. US_Browser.columnser = document.querySelectorAll('.MouseMenuMainer .column');
  727. US_Browser.dragEl = null;
  728. [].forEach.call(US_Browser.columns,function(column){
  729. column.addEventListener("dragstart",US_Browser.domdrugstart,false);
  730. column.addEventListener('dragenter', US_Browser.domdrugenter, false);
  731. column.addEventListener('dragover', US_Browser.domdrugover, false);
  732. column.addEventListener('dragleave', US_Browser.domdrugleave, false);
  733. column.addEventListener('drop', US_Browser.domdrop, false);
  734. column.addEventListener('dragend', US_Browser.domdrapend, false);
  735. column.addEventListener('mousedown', US_Browser.onmousedown, false);
  736. });
  737. [].forEach.call(US_Browser.columnser,function(column){
  738. column.addEventListener('mousedown', US_Browser.onmousedown, false);
  739. });
  740. }
  741. US_Browser.onmousedown = function(e){
  742. let btnNum = e.button;
  743. let BookmarkSet = document.querySelector('#US_BookmarkSet')
  744. if(btnNum==2){
  745. BookmarkSet.style.display = 'block'
  746. BookmarkSet.style.top = `${e.clientY}px`
  747. BookmarkSet.style.left = `${e.clientX}px`
  748. US_Browser.DelectBookmarktar = this
  749. }
  750. }
  751. US_Browser.domdrugstart = function(e) {
  752. US_Browser.dragEl = this;
  753. e.dataTransfer.setData("text/html",this.innerHTML);
  754. }
  755. US_Browser.domdrugenter = function(e) {
  756. }
  757. US_Browser.domdrugover = function(e) {
  758. if (e.preventDefault) {
  759. e.preventDefault();
  760. }
  761. e.dataTransfer.dropEffect = 'move';
  762. return false;
  763. }
  764. US_Browser.domdrugleave = function(e) {
  765. }
  766. US_Browser.domdrop = function(e) {
  767. if (e.stopPropagation) {
  768. e.stopPropagation();
  769. }
  770. if (US_Browser.dragEl != this) {
  771. US_Browser.dragEl.innerHTML = this.innerHTML;
  772. this.innerHTML = e.dataTransfer.getData('text/html');
  773. }
  774. let arr = JSON.parse(window.localStorage.getItem('arr'));
  775. let thiser = US_Browser.getchild(this)
  776. let laster = US_Browser.getchild(US_Browser.dragEl)
  777. let car = arr[thiser]
  778. arr[thiser] = arr[laster]
  779. arr[laster] = car
  780. window.localStorage.setItem('arr', JSON.stringify(arr))
  781. return false;
  782. }
  783. US_Browser.domdrapend = function(e) {
  784. [].forEach.call(US_Browser.columns, function (column) {
  785. });
  786. }
  787. US_Browser.getchild = function(msg){
  788. var i=0;
  789. while(msg = msg.previousSibling){
  790. i++;
  791. }
  792. return i - 1
  793. }
  794. US_Browser.DelectBookmark.onclick = function(){
  795. let BookmarkSet = document.querySelector('#US_BookmarkSet')
  796. BookmarkSet.style.display = 'none'
  797. let b = JSON.parse(window.localStorage.getItem('arr'))
  798. b.map((i, j) => {
  799. if (i.url === US_Browser.DelectBookmarktar.getAttribute('data')) {
  800. let arr = JSON.parse(window.localStorage.getItem('arr'))
  801. arr.splice(j, 1);
  802. window.localStorage.setItem('arr', JSON.stringify(arr))
  803. $('#FavoritesUl')[0].removeChild($('#FavoritesUl')[0].children[j])
  804. $('.MouseMenuMainer')[0].removeChild($('.MouseMenuMainer')[0].children[j])
  805. US_Browser.DelectBookmarktar.style.display = 'none';
  806. if(i.url === US_Browser.SelecteWebview.src){
  807. $('#LoveWebSize')[0].className = 'fa fa-heart'
  808. }
  809. }
  810. })
  811. }
  812. US_Browser.OpenBookmark.onclick = function(){
  813. US_Browser.CreatBrower(US_Browser.DelectBookmarktar.getAttribute('data'))
  814. document.querySelector('.US_BookmarkSet').style.display = 'none'
  815. }
  816. US_Browser.OpenBookmarker.onclick = function(){
  817. ipc.send('openlove', US_Browser.DelectBookmarktar.getAttribute('data'))
  818. $('#US_BookmarkSet')[0].style.display = 'none';
  819. }
  820. US_Browser.Head[0].style.color = '#d3d3d3';
  821. US_Browser.Head[1].style.color = '#d3d3d3';
  822. US_Browser.Head[2].style.color = '#d3d3d3';
  823. US_Browser.MenuBack.style.color='#adadad';
  824. US_Browser.MenuGo.style.color='#adadad';
  825. };//浏览器头部事件绑定
  826. US_Browser.Init=function () {//初始化
  827. US_Browser.isready = false
  828. US_Browser.Love = window.localStorage.getItem('arr')
  829. US_Browser.NavContainer=$(".bowerCreaterWindow")[0];//获取标签页ul
  830. US_Browser.MouseMenuMain=$("#webviewBrowserMenu")[0];//获取网页右键菜单
  831. US_Browser.RightMenu=$("#CampusInfoBrowserOnclickMenu")[0];//获取浏览器菜单
  832. US_Browser.RightMenubtn=$("#MouseMenuMainerBtn")[0];//获取浏览器菜单
  833. US_Browser.LoadTips=$(".BrowerTips")[0];
  834. US_Browser.FindContainer=$(".BrowerFind")[0];//查找菜单主题
  835. US_Browser.Elm=$(".BrowerFind *");//查找菜单的子级
  836. US_Browser.MenuBack= $(".US_Browers_Back")[0];
  837. US_Browser.MenuGo=$(".US_Browers_go")[0];
  838. US_Browser.FavoritesMore = $('.FavoritesMore')[0]
  839. US_Browser.MouseMenuMainer = $('.MouseMenuMainer')[0]
  840. US_Browser.DelectBookmark = $('#DelectBookmark')[0]
  841. US_Browser.OpenBookmark = $('#OpenBookmark')[0]
  842. US_Browser.OpenBookmarker = $('#OpenBookmarker')[0]
  843. US_Browser.DelectBookmarktar = ''
  844. US_Browser.Elm[0].onkeyup=function (e) {//查找的input
  845. if(this.value.length&&e.keyCode!==8){//如果存在值
  846. US_Browser.SelecteWebview.findInPage(this.value);
  847. US_Browser.SelecteWebview.FindKey=this.value;
  848. }else{
  849. US_Browser.SelecteWebview.stopFindInPage("keepSelection");
  850. US_Browser.SelecteWebview.FindKey=false;
  851. }
  852. };
  853. US_Browser.Elm[4].onclick=function () {
  854. US_Browser.Elm[2].onclick=US_Browser.Elm[3].onclick=null;
  855. US_Browser.SelecteWebview.FindKey?US_Browser.SelecteWebview.stopFindInPage("keepSelection"):'';
  856. US_Browser.FindContainer.style.display='none';
  857. };
  858. US_Browser.HeadBind();
  859. US_Browser.IpcBind();
  860. US_Browser.Loveitem();
  861. }();
  862. window.onload = function () {
  863. US_Browser.drag();
  864. }