瀏覽代碼

修复bug,添加新功能,版本更新2.1

ZJINH 8 年之前
父節點
當前提交
3c80025e44

File diff suppressed because it is too large
+ 1228 - 1295
resources/app/.idea/workspace.xml


+ 20 - 17
resources/app/browser.html

@@ -26,31 +26,34 @@
           <input type="text" placeholder="在此输入网址或关键词" id="search">
         </div>
         <button class="icon-ellipsis-vert"></button>
-        <ul class="MouseMenuMain" id="CampusInfoBrowserOnclickMenu" style="right: 1px;top:80px">
-            <li onclick="US_Browser.CreatBrower('')">打开一个新的标签页</li>
-            <li onclick="US_Browser.CreatBrowerWindow('')">打开新的窗口</li>
+        <ul class="MouseMenuMain" id="CampusInfoBrowserOnclickMenu" style="right: 1px;top:81px">
+            <li onclick="US_Browser.CreatBrower('')">打开一个新的标签页<span>Ctrl+T</span></li>
+            <li onclick="US_Browser.CreatBrowerWindow('')">打开新的窗口<span>Ctrl+N</span></li>
             <li style="display: none">打开一个新的窗口</li>
             <li class="MouseMenuMainStep"></li>
-            <li onclick="US_Browser.ShowHistory()">历史记录</li>
-            <li onclick="US_Browser.ClearCache()">清除缓存</li>
-            <li onclick="US_Browser.Print();">打印</li>
-            <li onclick="US_Browser.DevTools();">开发人员工具</li>
+            <li onclick="US_Browser.ShowHistory()">历史记录<span>Ctrl+H</span></li>
+            <li onclick="US_Browser.ClearCache()">清除缓存<span>F12/Ctrl+Shift+Del</span></li>
+            <li onclick="US_Browser.Print();">打印<span>Ctrl+P</span></li>
+            <li onclick="US_Browser.Find();">查找<span>Ctrl+F</span></li>
+            <li onclick="US_Browser.DevTools();">开发人员工具<span>F12/Ctrl+Shift+I</span></li>
             <li class="MouseMenuMainStep"></li>
-            <li onclick="US_Browser.CampusInfo()">校园资讯</li>
-            <li onclick="US_Browser.Feedback()">问题反馈</li>
-            <li onclick="US_Browser.about()">关于我们</li>
+            <li onclick="US_Browser.CampusInfo()">校园资讯<span>Alt+Shift+S</span></li>
+            <li onclick="US_Browser.Feedback()">问题反馈<span>Alt+Shift+I</span></li>
+            <li onclick="US_Browser.about()">关于我们<span>F1</span></li>
             <li class="MouseMenuMainStep"></li>
-            <li onclick="US_Browser.Exit()">退出</li>
+            <li onclick="US_Browser.Exit()">退出<span>Ctrl+Shift+Q</span></li>
         </ul>
     </div>
     <ul class="MouseMenuMain" id="webviewBrowserMenu">
-        <li class="US_Browers_Back"  onclick="US_Browser.goBack();">返回</li>
-        <li class="US_Browers_go" onclick="US_Browser.goForward();">前进</li>
-        <li onclick="US_Browser.reFresh();">重新加载</li>
-        <li onclick="US_Browser.Print();">打印</li>
+        <li class="US_OpenLinkInNew"  style="display: none">在新标签页中打开链接</li>
+        <li class='US_OpenImgInNew' style="display: none">在新标签页中打开图片</li>
+        <li class="US_Browers_Back"  onclick="US_Browser.goBack();">返回<span>Alt+左箭头</span></li>
+        <li class="US_Browers_go" onclick="US_Browser.goForward();">前进<span>Alt+右箭头</span></li>
+        <li onclick="US_Browser.reFresh();">重新加载<span>Ctrl+R</span></li>
+        <li onclick="US_Browser.Print();">打印<span>Ctrl+P</span></li>
         <li class="MouseMenuMainStep"></li>
-        <li onclick="US_Browser.SourceCode();">查看网页源代码</li>
-        <li onclick="US_Browser.DevTools();">检查</li>
+        <li onclick="US_Browser.SourceCode();">查看网页源代码<span>Ctrl+U</span></li>
+        <li onclick="US_Browser.DevTools();">检查<span>F12/Ctrl+Shift+I</span></li>
     </ul>
     <div class="BrowerFind">
         <input type="text" placeholder="搜索网页内容">

+ 68 - 0
resources/app/error.html

@@ -0,0 +1,68 @@
+<html dir="ltr" lang="zh" i18n-processed=""><head>
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0,maximum-scale=1.0, user-scalable=no">
+  <title></title>
+</head>
+<style>
+  #main-frame-error{
+    margin: 0px auto;
+    width: 50%;
+    margin-top: 15%;
+  }
+  #main-frame-error p{
+    font-size: 30px;
+  }
+  button{
+    background: rgb(66, 133, 244);
+    border: 0;
+    border-radius: 2px;
+    box-sizing: border-box;
+    color: #fff;
+    cursor: pointer;
+    font-size: .875em;
+    padding: 10px 24px;
+    transition: box-shadow 200ms cubic-bezier(0.4, 0, 0.2, 1);
+    user-select: none;
+    margin-top: 20px;
+  }
+  strong{
+    color:rgb(100, 100, 100)
+  }
+  .error-code{
+    color: #aba8a8;
+    margin-top: 20px;
+  }
+</style>
+<body  style="font-family: 'Segoe UI',Arial,'Microsoft Yahei',sans-serif;">
+<div id="main-frame-error" class="interstitial-wrapper">
+  <div id="main-content" >
+    <div id="main-message">
+      <p>无法访问此网站</p>
+      <strong></strong>
+      <div class="error-code"></div>
+    </div>
+  </div>
+  <div>
+      <button onclick="window.location.href=url">重新加载</button>
+  </div>
+</div>
+</body>
+<script>
+  function get (url) {
+      url=url?url:location.search; //获取url中"?"符后的字串
+      var param = {},strs;
+      if (url.split("?").length>1) {
+          strs = url.split("?")[1].split("&");
+          for(var i = 0; i < strs.length; i ++) {
+              param[strs[i].split("=")[0]]=decodeURIComponent(strs[i].split("=")[1]);
+          }
+      }
+      return param;
+  };
+  let query=get();
+  let url=query.url;
+  let msg=query.msg;
+  document.title=document.getElementsByTagName('strong')[0].innerHTML=url;
+  document.getElementsByClassName('error-code')[0].innerHTML=msg;
+</script>
+</html>

+ 1 - 1
resources/app/feedback.html

@@ -48,7 +48,7 @@ FeedBackFrom[3].onclick=function(){
         return false;
     }
     if(FeedBackFrom[0].value!=="" && FeedBackFrom[1].value!==""){
-        U.A.Request("http://cd.1473.cn/net",["db.1473.cn", "UseStudio_FeedBack", "InsertUserFeedback","3cd76163-ee3e-4eb4-a586-aabec937fa2c",FeedBackFrom[0].value,FeedBackFrom[1].value.replace(/\s+/g,"")],function (r){//插入信息到数据库
+        U.A.Request("http://cd.1473.cn/net",["db.1473.cn", "UseStudio_FeedBack", "InsertUserFeedback","3cd76163-ee3e-4eb4-a586-aabec937fa2c",FeedBackFrom[0].value,FeedBackFrom[1].value],function (r){//插入信息到数据库
            if(r.value){
                alert('提交成功');
                ipc.send('BrowserFeedback-close');

+ 4 - 0
resources/app/main.js

@@ -77,6 +77,7 @@ function createWindow(request_url) {
     if(debug) {
         mainWindow.webContents.openDevTools();
     }
+    mainWindow.webContents.openDevTools();
     mainWindow.on('closed', function () {
         mainWindow = null
     });
@@ -244,6 +245,9 @@ function BindIpc(){
     ipc.on('orignal-window', function () {//还原
         mainWindow.restore();
     });
+    ipc.on('elm',function (e,arg){
+        mainWindow.webContents.send('elm', arg);
+    });
     /*反馈窗口ipc*/
     ipc.on('BrowserFeedback-show', function () {
         createFeedBack();

+ 2 - 2
resources/app/package.json

@@ -3,7 +3,7 @@
   "main": "main.js",
   "private": true,
   "productName": "Usestudio-Browers",
-  "version": "2.0.5",
+  "version": "2.1",
   "author": "ZJINH",
   "email":"211775259@qq.com",
   "dependencies": {
@@ -39,7 +39,7 @@
       "runAfterFinish": true
     },
     "mac": {
-      "icon": "public\\img\\tray\\app.ico",
+      "icon": "public\\img\\tray\\app.icns",
       "category": "browers",
       "target": [
         "dmg"

+ 13 - 4
resources/app/public/css/browser.css

@@ -12,6 +12,11 @@ body{
     padding: 0;
     overflow: hidden;
 }
+body,html {
+    height:100%;
+    -webkit-text-size-adjust:100%;
+    -ms-text-size-adjust:100%;
+}
 ul,li{
     margin: 0;
     padding: 0;
@@ -154,7 +159,6 @@ button:hover {
     font-size: 18px;
     padding-top: 2px;
 }
-
 .bowerHeaderSeach .bowerMenu {
     float: right;
 }
@@ -309,7 +313,7 @@ button.BrowwerAdd {
     position: absolute;
     width: 100%;
     left: 0;
-    top: 80px;
+    top: 81px;
 }
 .BrowerContainer webview, webview object{
     height: 100% !important;
@@ -341,6 +345,11 @@ button.BrowwerAdd {
     white-space: nowrap;
     margin-bottom: 2px;
 }
+.MouseMenuMain li span{
+    float: right;
+    margin-left: 40px;
+    color: #bfbfbf;
+}
 .MouseMenuMain li:hover{
     background-color:#eee;
     color:#000;
@@ -671,10 +680,10 @@ button.BrowwerAdd {
     height:7px;
     background:none;
 }
-*::-webkit-scrollbar-button    {
+*::-webkit-scrollbar-button{
     display:none;
 }
-*::-webkit-scrollbar-track     {
+*::-webkit-scrollbar-track{
     background:none;
 }
 *::-webkit-scrollbar-track-piece {

二進制
resources/app/public/img/tray/app.icns


+ 95 - 31
resources/app/public/js/browser.js

@@ -28,7 +28,6 @@ US_Browser.CreatBrower=function (address,flag) {//创建窗口,url,是否为
     ListBody.tag_favicon.style.display=(address&&address!==null)?"block":"none";
     ListBody.tag_favicon.onerror=function () {//不存在时显示的标签页图标
         this.src='public/img/tray/logo.png';
-        webview.tag.data.favicons=this.src;
     };
     ListBody.Webname=$$("p", {//标签页标题
         "className": "Webname","innerHTML":address?"正在加载":"新建标签","draggable":"false"
@@ -38,8 +37,13 @@ US_Browser.CreatBrower=function (address,flag) {//创建窗口,url,是否为
     }, ListBody);
     let BrowerContainer=$$("div", {"className":"BrowerContainer"},$("body")[0]);//装载webview
     let webview=$$("webview", {//创建webview
-        "allowpopups":"", "autosize":"on"
+        "allowpopups":"", "autosize":"on","preload":"./public/js/preload.js"
     }, BrowerContainer);
+    li.onmousedown=function(e){
+        if(e.button===1){
+            ListBody.tag_close.click(0)
+        }
+    };
     webview.setAttribute('plugins','');
     webview.state=(address&&address!==null)?false:true;
     webview.tag=li;//把li赋给webview标签
@@ -92,6 +96,7 @@ US_Browser.CreatBrower=function (address,flag) {//创建窗口,url,是否为
         US_Browser.LoadTips.innerHTML='正在请求:'+e.originalURL;
     });
     webview.addEventListener('did-start-loading',function (e) {
+        ListBody.tag_favicon.src='';
         US_Browser.IsLoading(this,true);
     });
     webview.addEventListener('did-finish-load',function (e) {
@@ -118,12 +123,37 @@ US_Browser.CreatBrower=function (address,flag) {//创建窗口,url,是否为
             };
         }
     });
-    webview.addEventListener('did-fail-load',function (e) {
-        console.log(e)
-    });
+    /*webview.addEventListener('did-fail-load',function (e) {
+        if(webview.state) {
+            let msg = e.errorDescription;
+            let old_url = US_Browser.Head[5].value;
+            US_Browser.SelecteWebview.src = 'error.html?msg=' + msg + '&url=' + this.src;
+            US_Browser.Head[5].value = old_url;
+        }
+    });*/
     webview.fullSrceen=false;
     webview.FindKey=false;
     webview.onmousedown=function (e) {//webview鼠标事件
+        ipcRenderer.on('elm',function (e,msg) {
+            US_Browser.MouseData=msg;
+            US_Browser.US_OpenLinkInNew.style.display=US_Browser.US_OpenImgInNew.style.display='none';
+            if(US_Browser.MouseData) {
+                let tag = US_Browser.MouseData.tag;
+                if (tag === 'A') {
+                    US_Browser.US_OpenLinkInNew.style.display = 'block';
+                    US_Browser.US_OpenLinkInNew.onclick = function () {
+                        US_Browser.CreatBrower(US_Browser.MouseData.href)
+                    };
+                } else if (tag === 'IMG') {
+                    US_Browser.US_OpenImgInNew.style.display = 'block';
+                    US_Browser.US_OpenImgInNew.onclick = function () {
+                        US_Browser.CreatBrower(US_Browser.MouseData.src)
+                    };
+                } else {
+                    US_Browser.US_OpenLinkInNew.style.display = US_Browser.US_OpenImgInNew.style.display = 'none';
+                }
+            }
+        });
         US_Browser.MouseMenu(US_Browser.MouseMenuMain,this,e);//右键显示创建应用菜单
     };
     ListBody.tag_close.onclick=function () {//点击标题页关闭按钮
@@ -170,17 +200,17 @@ US_Browser.MouseMenu=function (menu_main,data,e,flag) {//右键菜单事件
     }
     document.onmouseup=function () {//鼠标事件后触发
         if (e.button === 2||flag) {
+            menu_main.style.display = 'block';//显示菜单
             if (!flag) {
                 menu_main.style.left = e.pageX + -parseFloat(createNode.getBoundingClientRect().left) + createNode.offsetLeft + 'px';//菜单定位横坐标
                 menu_main.style.top = e.pageY + -parseFloat(createNode.getBoundingClientRect().top) + createNode.offsetTop + 'px';//菜单定位纵坐标
-                if (menu_main.getBoundingClientRect().left + menu_main.offsetHeight - createNode.getBoundingClientRect().left > createNode.offsetWidth) {//判断距左位置
-                    menu_main.style.left = menu_main.style.left.split('px')[0] - menu_main.offsetWidth + 'px';//距左多少
+                if (menu_main.getBoundingClientRect().left + menu_main.offsetWidth > createNode.offsetWidth) {//判断距左位置
+                    menu_main.style.left = menu_main.style.left.split('px')[0] - menu_main.offsetWidth -30+ 'px';//距左多少
                 }
-                if (menu_main.getBoundingClientRect().top + menu_main.offsetHeight - createNode.getBoundingClientRect().top > createNode.offsetHeight) {//判断距上位置
+                if (menu_main.getBoundingClientRect().top + menu_main.offsetHeight> createNode.offsetHeight) {//判断距上位置
                     menu_main.style.top = menu_main.style.top.split('px')[0] - menu_main.offsetHeight + 'px';//距上多少
                 }
             }
-            menu_main.style.display = 'block';//显示菜单
             document.onmouseup = null;//清空
         }
     };
@@ -335,17 +365,17 @@ US_Browser.IpcBind=function(){
         if(message>0){
             US_Browser.ControlButton[1].className='icon-window-restore';
             US_Browser.NavContainer.style.padding = "5px 0 0";
-            US_Browser.RightMenu.style.top='70px';
+            US_Browser.RightMenu.style.top='71px';
             US_Browser.BrowerContainer.each(function (index,elm) {
-                elm.style.top='70px';
+                elm.style.top='71px';
                 elm.style.height='calc(100% - 70px)';
             })
         }else {
             US_Browser.ControlButton[1].className='icon-window-maximize';
             US_Browser.NavContainer.style.padding = "15px 0 0";
-            US_Browser.RightMenu.style.top='80px';
+            US_Browser.RightMenu.style.top='81px';
             US_Browser.BrowerContainer.each(function (index,elm) {
-                elm.style.top='80px';
+                elm.style.top='81px';
                 elm.style.height='calc(100% - 80px)';
             })
         }
@@ -356,6 +386,8 @@ US_Browser.Bind=function(){//绑定
     US_Browser.BrowersTag=$(".BrowerList");//获取选项卡li
     US_Browser.BrowerContainer=$(".BrowerContainer");//获取webview
     US_Browser.SelecteWebview=US_Browser.BrowerContainer[0].children[0];
+    US_Browser.US_OpenLinkInNew=$(".US_OpenLinkInNew")[0];
+    US_Browser.US_OpenImgInNew=$(".US_OpenImgInNew")[0];
     for(let i=0;i<US_Browser.BrowersTag.length;i++){//对选项卡及webview进行操作
         (function (i) {
             US_Browser.BrowersTag[i].onclick=function () {
@@ -397,6 +429,22 @@ US_Browser.Bind=function(){//绑定
         })(i);
     }
 };//标签页事件绑定
+US_Browser.Find=function(){
+    if(US_Browser.FindContainer.offsetWidth) {
+        US_Browser.FindContainer.style.display = 'none';
+        US_Browser.Elm[0].blur();
+    }else {
+        US_Browser.FindContainer.style.display = 'block';
+        US_Browser.Elm[0].value = '';
+        US_Browser.Elm[1].innerHTML = '0/0';
+        US_Browser.Elm[0].focus();
+    }
+};//开启关闭查找函数;
+US_Browser.SaveAs=function(){
+  US_Browser.SelecteWebview.getWebContents().savePage(US_Browser.Head[5].value,'HTMLComplete',function () {
+
+  })
+};//另存为喊
 US_Browser.HeadBind=function(){
     let http = /^(http)/;
     let https = /^(https)/;
@@ -413,7 +461,7 @@ US_Browser.HeadBind=function(){
             ipc.send('show-window');
             this.className='icon-window-restore';
             US_Browser.NavContainer.style.padding = "5px 0 0";
-            US_Browser.RightMenu.style.top='70px';
+            US_Browser.RightMenu.style.top='71px';
             US_Browser.BrowerContainer.each(function (index,elm) {
                 elm.style.top='70px';
                 elm.style.height='calc(100% - 70px)';
@@ -422,9 +470,9 @@ US_Browser.HeadBind=function(){
             ipc.send('orignal-window');
             this.className='icon-window-maximize';
             US_Browser.NavContainer.style.padding = "15px 0 0";
-            US_Browser.RightMenu.style.top='80px';
+            US_Browser.RightMenu.style.top='81px';
             US_Browser.BrowerContainer.each(function (index,elm) {
-                elm.style.top='80px';
+                elm.style.top='81px';
                 elm.style.height='calc(100% - 80px)';
             })
         }
@@ -465,6 +513,9 @@ US_Browser.HeadBind=function(){
             this.blur();
         }
     };
+    US_Browser.Head[5].onfocus=function(e){
+        this.select();
+    };
     US_Browser.Head[6].onmousedown=function (event) {//点击菜单
         US_Browser.MouseMenu(US_Browser.RightMenu,this,event,true);//右键显示创建应用菜单
     };
@@ -498,25 +549,30 @@ US_Browser.HeadBind=function(){
         evt = (evt) ? evt : window.event;
         if(evt.keyCode===112 ){
             US_Browser.about();
-        }else if(evt.keyCode===114||((evt.ctrlKey)&&(evt.keyCode===70))) {
-            if(US_Browser.FindContainer.offsetWidth) {
-                US_Browser.FindContainer.style.display = 'none';
-                US_Browser.Elm[0].blur();
-            }else {
-                US_Browser.FindContainer.style.display = 'block';
-                US_Browser.Elm[0].value = '';
-                US_Browser.Elm[1].innerHTML = '0/0';
-                US_Browser.Elm[0].focus();
-            }
-        }else if(evt.keyCode===116){
+        }else if(evt.keyCode===114||((evt.ctrlKey)&&(evt.keyCode===70))||((evt.ctrlKey)&&(evt.keyCode===71))) {//查找
+            US_Browser.Find();
+        }else if((evt.keyCode===116)||((evt.ctrlKey)&&(evt.keyCode===82))){//重新加载、刷新
             if(US_Browser.Head[2].className==='icon-cw') {
                 US_Browser.reFresh()
             }else{
                 US_Browser.Stop();
                 US_Browser.Head[2].className='icon-cw';
             }
-        }
-        else if(evt.keyCode===117){
+        }else if((evt.ctrlKey)&&(evt.keyCode===72)){//历史记录
+            US_Browser.ShowHistory();
+        }else if((evt.ctrlKey)&&(evt.keyCode===80)){//打印
+            US_Browser.Print();
+        }else if((evt.ctrlKey)&&(evt.keyCode===84)){//打开一个新标签页
+            US_Browser.CreatBrower(null);
+        }else if((evt.ctrlKey)&&(evt.keyCode===78)){//打开一个新的窗口
+            US_Browser.CreatBrowerWindow('');
+        }else if((evt.ctrlKey)&&(evt.keyCode===85)){//查看网页源代码
+            US_Browser.SourceCode();
+        }else if((evt.altKey)&&(evt.keyCode===39)){//前进
+            US_Browser.goForward();
+        }else if((evt.altKey)&&(evt.keyCode===37)){//后退
+            US_Browser.goBack();
+        }else if(evt.keyCode===117){//选择地址栏
             if(document.activeElement.id===US_Browser.Head[5].id){
                 US_Browser.Head[5].blur();
             }else{
@@ -546,10 +602,18 @@ US_Browser.HeadBind=function(){
             }
         }else if (evt.keyCode===123||((evt.ctrlKey)&&(evt.shiftKey)&&(evt.keyCode===73))) {//F12、ctrl+shift+i
             US_Browser.DevTools();
-        }else if((evt.ctrlKey)&&(evt.keyCode===87)){
-            if($(".BrowerContainer").length>0&&US_Browser.SelecteWebview.tag.children[0].tag_favicon.offsetWidth) {
+        }else if((evt.ctrlKey)&&(evt.keyCode===87)) {//关闭标签页
+            if ($(".BrowerContainer").length > 0) {
                 US_Browser.SelecteWebview.tag.children[0].tag_close.click();
             }
+        }else if(((evt.ctrlKey)&&(evt.shiftKey)&&(evt.keyCode===81))){//退出浏览器
+            US_Browser.Exit();
+        }else if(((evt.ctrlKey)&&(evt.shiftKey)&&(evt.keyCode===46))){
+            US_Browser.ClearCache();
+        }else if(((evt.altKey)&&(evt.shiftKey)&&(evt.keyCode===73))){
+            US_Browser.Feedback();
+        }else if(((evt.altKey)&&(evt.shiftKey)&&(evt.keyCode===83))){
+            US_Browser.CampusInfo();
         }
     };
     US_Browser.Head[0].style.color = '#d3d3d3';

+ 13 - 0
resources/app/public/js/preload.js

@@ -0,0 +1,13 @@
+const remote = require('electron').remote;
+const {ipcRenderer} = require('electron');
+window.addEventListener('contextmenu', function (e) {
+    e.preventDefault();
+    if(e.path[0].src||e.path[0].href) {
+        let data = {
+            "tag": e.path[0].tagName,
+            "href": e.path[0].href || null,
+            "src": e.path[0].src || null,
+        };
+        ipcRenderer.send('elm', data)
+    }
+});