因為最近很忙,本來打算不斷更新博客的。由于時間關(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)到電腦的默認瀏覽器啦~
其他方法
其他方法我就不多說了,簡單描述一下,不同需求可能用到的方法不一樣。
方法一
您可以簡單地使用:
//老外力薦的方法

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);
}
});
方法六
我將此方法與 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)址是多少:
很多家庭都會購買無線路由器,而現(xiàn)在市場的無線路由器品牌就有tp-link路由器,騰達路由器,水星路由器,斐訊路由器,F(xiàn)AST迅捷路由器、小米路由器。不管您購買的哪個牌子的路由器都需要登錄網(wǎng)頁進行連接,而設置無線路由器的網(wǎng)址是192.168.1.1,這個網(wǎng)頁打開成功后就能根據(jù)說明書進行無線路由器的設置。
二、192.168.1.1主頁打不開怎么辦:
進入設置無線路由器的網(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)頁進入時也會打不開。
3、使用http:和都可以,也可以直接輸入192.168.1.1,另外末尾多一位點也可以,即192.168.1.1.也可以登陸路由器。錯誤的情況則是會出現(xiàn)這樣http :192.168.1.1,這樣是打不開路由器登陸頁面。而且網(wǎng)址的小點是不能少的,這些輸入都是把小點漏掉了,同樣路由器登陸頁面打不開。
4、有時候也會因為輸入法的原因,導致將小點按成了逗號,這樣的網(wǎng)址是錯誤的,也無法登陸192.168.1.1管理頁面。還有一種現(xiàn)象是喜歡加www,可能這樣的組合輸入習慣了,也會讓網(wǎng)頁登錄失敗。
小編小結(jié):文中小編為大家介紹了設置無線路由器的網(wǎng)址是多少以及192.168.1.1主頁打不開怎么辦的相關(guān)知識,大家可以參考一下。設置無線路由器的網(wǎng)址在正確輸入的情況,是能正常登錄的哦。
什么,裝修還用自己的錢?!齊家裝修分期,超低年利率3.55%起,最高可貸100萬。立即申請享受優(yōu)惠
*請認真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。