browser.js 32 KB

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