整合營銷服務商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          最全最新方法:Electron開發(fā)中設置a標簽的href跳轉(zhuǎn)默認瀏覽器打開鏈接

          因為最近很忙,本來打算不斷更新博客的。由于時間關(guān)系,因此更新較慢。

          背景

          因為最近有需求,想快速開發(fā)一個桌面端應用,最好是采用H5+JS+CSS3進行開發(fā),這樣效率最高。但是要知道,H5來開發(fā)桌面端,由于瀏覽器安全策略問題,是不可能直接給你調(diào)用本地系統(tǒng)API的,因此也出現(xiàn)了很多打包框架,國外免費的有(Github團隊開發(fā)和維護)、NW.js(.js)及(不太推薦)。國內(nèi)有付費的打包軟件,有錢的大佬可以用,比較省心,底層原理還是封裝了。

          這里我選用的是。雖然NW.js和都可以跨平臺打包,但是你會才到無數(shù)坑。各有優(yōu)缺點吧,我個人比較喜歡前者。

          但是我相信大家在用前端技術(shù)做桌面開發(fā)的過程中,最大的痛苦就是瀏覽器的跨域問題、同源問題及其他安全性問題,還有對系統(tǒng)原生API支持力度不夠。這里我就遇到了這樣一個問題:

          在頁面中的標簽里的href屬性,點擊以后還是在內(nèi)置的瀏覽器(Chrome V8引擎)中跳轉(zhuǎn)并打開多個頁面。而我想實現(xiàn)的是,點擊鏈接或者按鈕,會自動跳轉(zhuǎn)到系統(tǒng)默認瀏覽器中。

          推薦方法

          我在國內(nèi)網(wǎng)站上查閱了各種教程資料,只能感慨:1.治標不治本,思路不算好;2.很多方法已經(jīng)過時了。經(jīng)過我查閱了國外大量文獻和教程,最終找到一種合適的辦法。這里推薦第一種:

          1.前提是你的鏈接需要添加target="_blank"屬性才行;

          2.然后在main.js主程序中添加shell請求,如下:

          const { app, BrowserWindow, shell } = require('electron')

          3.其次在 ()函數(shù)中新增一個函數(shù):

          mainWindow.webContents.on('new-window', function(e, url) {
              e.preventDefault();
              require('electron').shell.openExternal(url);
            })

          原來的文件長這樣:

          const { app, BrowserWindow } = require('electron')
          const path = require('path')
          function createWindow() {
            // Create the browser window.
            const mainWindow = new BrowserWindow({
              width: 1600,
              height: 1000,
              ...
              title: "xxx",
              webPreferences: {
                ...
                preload: path.join(__dirname, 'preload.js')
              }
            })
              ...
            // and load the index.html of the app.
            mainWindow.webContents.openDevTools();
            mainWindow.loadFile('index.html')

          修改后的文件長這樣(注意觀察文件的不同):

          const { app, BrowserWindow, shell } = require('electron')
          const path = require('path')
          function createWindow() {
            // Create the browser window.
            const mainWindow = new BrowserWindow({
              width: 1600,
              height: 1000,
              xxx
              title: "xxx",
              webPreferences: {
                preload: path.join(__dirname, 'preload.js')
              }
            })
            mainWindow.webContents.on('new-window', function(e, url) {
              e.preventDefault();
              require('electron').shell.openExternal(url);
            })
              ...
            // and load the index.html of the app.
            mainWindow.webContents.openDevTools();
            mainWindow.loadFile('index.html')

          然后你的鏈接就可以愉快的跳轉(zhuǎn)到電腦的默認瀏覽器啦~

          其他方法

          其他方法我就不多說了,簡單描述一下,不同需求可能用到的方法不一樣。

          方法一

          您可以簡單地使用:

          //老外力薦的方法
          

          瀏覽鏈接器下載打開不了_瀏覽鏈接器下載打開網(wǎng)頁_瀏覽器下載鏈接打不開

          require("shell").openExternal("http://www.google.com")

          方法二

          這個答案很老了,假設你有 jQuery。

          const shell = require('electron').shell;
            
          // assuming $ is jQuery
          $(document).on('click', 'a[href^="http"]', function(event) {
              event.preventDefault();
              shell.openExternal(this.href);
          });

          方法三

          代碼片段根據(jù) 版本 v12.0.0 中的折舊提供線索

          const win = new BrowserWindow();
          win.webContents.setWindowOpenHandler(({ url }) => {
              // config.fileProtocol is my custom file protocol
              if (url.startsWith(config.fileProtocol)) {
                  return { action: 'allow' };
              }
              // open url in a browser and prevent default
              shell.openExternal(url);
              return { action: 'deny' };
          });

          方法四

          要使所有 鏈接在默認 OS 瀏覽器中從外部打開,您必須向onclick它們添加一個屬性并更改該href屬性,以便它不會在 應用程序中加載任何內(nèi)容。

          你可以使用這樣的方式:

          aTags = document.getElementsByTagName("a");
          for (var i = 0; i < aTags.length; i++) {
            aTags[i].setAttribute("onclick","require('shell').openExternal('" + aTags[i].href + "')");
            aTags[i].href = "#";
          }

          但請確保在執(zhí)行此操作之前已加載整個文檔,否則它將無法正常工作。

          更健壯的實現(xiàn)如下所示:

          if (document.readyState != "complete") {
            document.addEventListener('DOMContentLoaded', function() {
              prepareTags()
            }, false);
          } else {
            prepareTags();
          }
          function prepareTags(){
            aTags = document.getElementsByTagName("a");
            for (var i = 0; i < aTags.length; i++) {
              aTags[i].setAttribute("onclick","require('shell').openExternal('" + aTags[i].href + "')");
              aTags[i].href = "#";
            }
            return false;
          }

          請記住,如果您加載外部文件,則必須在它們完全加載后也使它們經(jīng)歷此過程。

          方法五

          通過偵聽主體,以下解決方案將適用于 運行時可能尚不存在但僅在稍后出現(xiàn)在 DOM 中的標簽。

          這個需要 jQuery:

          $('body').on('click', 'a', (event) => {
            event.preventDefault();
            require("electron").shell.openExternal(event.target.href);
          });

          您可以將選擇器更改為僅針對某些鏈接,例如'#-view a'或'a.open-'。

          這是一個沒有任何庫的替代方案:

          document.body.addEventListener('click', event => {
            if (event.target.tagName.toLowerCase() === 'a') {
              event.preventDefault();
              require("electron").shell.openExternal(event.target.href);
            }
          });

          瀏覽鏈接器下載打開網(wǎng)頁_瀏覽鏈接器下載打開不了_瀏覽器下載鏈接打不開

          方法六

          我將此方法與 v.13 一起使用。

          我們攔截用戶的導航(window.)并在默認瀏覽器中打開 URL。

          請參閱文檔:

          const { shell } = require('electron');
          window.webContents.on('will-navigate', function (e, url) {
              e.preventDefault();
              shell.openExternal(url);
          });

          方法七

          關(guān)于tsx語法():

          import { shell } from "electron";
          shell.openExternal("http://www.google.com")

          方法八

          要在 的項目中打開外部鏈接,您需要模塊 Shell () 和方法。

          但是,如果您正在尋找一種實現(xiàn)該邏輯的抽象方法,那就是為您的目標屬性創(chuàng)建一個自定義目標的處理程序。

          const {shell} = require('electron');
          if (document.readyState != "complete") {
              document.addEventListener('DOMContentLoaded', function() {
                  init()
              }, false);
          } else {
              init();
          }
          function init(){
              handleExternalLinks();
              //other inits
          }
          function handleExternalLinks(){
              let links = document.getElementsByTagName('a')
              let a,i = 0;
              while (links[i]){
                  a = links[i]
                  //If , so open using shell.
                  if(a.getAttribute('target') == '_external'){
                      a.addEventListener('click',(ev => {
                          ev.preventDefault();
                          let url = a.href;
                          shell.openExternal(url);
                          a.setAttribute('href', '#');
                          return false;
                      }))
                  }
                  console.log(a,a.getAttribute('external'))
                  i++;
              }
          }

          方法九

          要在您的實際瀏覽器(Chrome、Mozilla 等)中運行 項目,請將其添加到您的腳本是外部腳本:

          aTags = document.getElementsByTagName("a");
          for (var i = 0; i < aTags.length; i++) {
               aTags[i].setAttribute("onclick","require('shell').openExternal('" + aTags[i].href + "')");
               aTags[i].href = "#";
          }

          最后BB兩句,全球 YYDS,當我們找不到好的辦法的時候,學會去外面看看。

          所有方法均來自 或 ,在cc by-sa 2.5、cc by-sa 3.0和cc by-sa 4.0下獲得許可

          版權(quán)聲明:本文為CSDN博主「」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。

          原文鏈接:

          設置無線路由器的網(wǎng)址是多少 192.168.1.1主頁打不開怎么辦

          現(xiàn)在可是互聯(lián)網(wǎng)時代,家家都有電腦,筆記本、平板電腦等,而這些電子設備都需要連接網(wǎng)絡,也只有購買無線路由器才能實現(xiàn)一條網(wǎng)線,多種設備上網(wǎng)的需求,而購買回來的無限路由器也需要進行連接,那么設置無線路由器的網(wǎng)址是多少以及192.168.1.1主頁打不開怎么辦呢,接下來就隨小編一起去了解下吧!

          無線連接網(wǎng)頁打不開_用無線網(wǎng)頁打不開_無線網(wǎng)頁打不開怎么辦

          一、設置無線路由器的網(wǎng)址是多少:

          很多家庭都會購買無線路由器,而現(xiàn)在市場的無線路由器品牌就有tp-link路由器,騰達路由器,水星路由器,斐訊路由器,F(xiàn)AST迅捷路由器、小米路由器。不管您購買的哪個牌子的路由器都需要登錄網(wǎng)頁進行連接,而設置無線路由器的網(wǎng)址是192.168.1.1,這個網(wǎng)頁打開成功后就能根據(jù)說明書進行無線路由器的設置。

          無線網(wǎng)頁打不開怎么辦_用無線網(wǎng)頁打不開_無線連接網(wǎng)頁打不開

          二、192.168.1.1主頁打不開怎么辦:

          無線連接網(wǎng)頁打不開_用無線網(wǎng)頁打不開_無線網(wǎng)頁打不開怎么辦

          進入設置無線路由器的網(wǎng)址是很關(guān)鍵的一步,如果主頁進入不成功,那么意味著無線路由器將無法設置,那么192.168.1.1主頁打不開應該怎么辦呢:

          1、192.168.1.1屬于IP地址的C類地址,是供無線路由器設置的專屬網(wǎng)址,同時也是屬于保留IP。簡單的說192.168.1.1就是無線路由器的設置網(wǎng)址,在瀏覽器網(wǎng)址欄中輸入就可以打開路由器登陸管理頁面,進行路由器設置。而且新買的無線路由器都需要通過192.168.1.1登陸路由器。

          2、如果遇見192.168.1.1登陸之后,網(wǎng)頁打不開,那有可能是因為您的輸入方式不正確,正確是輸入方式是192.168.1.1,,http:192.168.1.1,192 .168.1.1.這四種方式都是正確的,如果中間有空格,那么網(wǎng)頁進入時也會打不開。

          無線連接網(wǎng)頁打不開_用無線網(wǎng)頁打不開_無線網(wǎng)頁打不開怎么辦

          3、使用http:和都可以,也可以直接輸入192.168.1.1,另外末尾多一位點也可以,即192.168.1.1.也可以登陸路由器。錯誤的情況則是會出現(xiàn)這樣http :192.168.1.1,這樣是打不開路由器登陸頁面。而且網(wǎng)址的小點是不能少的,這些輸入都是把小點漏掉了,同樣路由器登陸頁面打不開。

          無線網(wǎng)頁打不開怎么辦_用無線網(wǎng)頁打不開_無線連接網(wǎng)頁打不開

          4、有時候也會因為輸入法的原因,導致將小點按成了逗號,這樣的網(wǎng)址是錯誤的,也無法登陸192.168.1.1管理頁面。還有一種現(xiàn)象是喜歡加www,可能這樣的組合輸入習慣了,也會讓網(wǎng)頁登錄失敗。

          無線網(wǎng)頁打不開怎么辦_無線連接網(wǎng)頁打不開_用無線網(wǎng)頁打不開

          小編小結(jié):文中小編為大家介紹了設置無線路由器的網(wǎng)址是多少以及192.168.1.1主頁打不開怎么辦的相關(guān)知識,大家可以參考一下。設置無線路由器的網(wǎng)址在正確輸入的情況,是能正常登錄的哦。

          什么,裝修還用自己的錢?!齊家裝修分期,超低年利率3.55%起,最高可貸100萬。立即申請享受優(yōu)惠


          主站蜘蛛池模板: 亚洲一区二区三区91| 国产福利电影一区二区三区| 无码欧精品亚洲日韩一区| 国产产一区二区三区久久毛片国语 | 亚洲狠狠狠一区二区三区| 熟妇人妻一区二区三区四区| 亚洲午夜福利AV一区二区无码| 熟女性饥渴一区二区三区| 精品成人av一区二区三区| 国模私拍一区二区三区| 亚洲一区二区影视| 国产精品无码一区二区三区毛片| 国产成人无码精品一区二区三区| 人妻体内射精一区二区| 国产精品高清一区二区三区| 精品国产一区二区三区AV| 福利一区二区视频| 亚洲va乱码一区二区三区| 国产精品99无码一区二区| 午夜一区二区免费视频| 国精产品一区一区三区免费视频 | 看电影来5566一区.二区| 午夜视频一区二区三区| 一区二区无码免费视频网站| 少妇无码AV无码一区| 老鸭窝毛片一区二区三区| 日韩一区精品视频一区二区| 欧美日韩一区二区成人午夜电影| 秋霞无码一区二区| 久久无码人妻精品一区二区三区 | 国产精品男男视频一区二区三区| 国产一区二区电影| 国模大尺度视频一区二区| 福利片免费一区二区三区| 国产vr一区二区在线观看| 国产成人高清精品一区二区三区| 亚洲第一区香蕉_国产a| 精品视频一区在线观看| 国产精品免费大片一区二区| 国产精品乱码一区二区三| 国产精品资源一区二区|