Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
因?yàn)樽罱苊Γ緛?lái)打算不斷更新博客的。由于時(shí)間關(guān)系,因此更新較慢。
背景
因?yàn)樽罱行枨螅肟焖匍_(kāi)發(fā)一個(gè)桌面端應(yīng)用,最好是采用H5+JS+CSS3進(jìn)行開(kāi)發(fā),這樣效率最高。但是要知道,H5來(lái)開(kāi)發(fā)桌面端,由于瀏覽器安全策略問(wèn)題,是不可能直接給你調(diào)用本地系統(tǒng)API的,因此也出現(xiàn)了很多打包框架,國(guó)外免費(fèi)的有(Github團(tuán)隊(duì)開(kāi)發(fā)和維護(hù))、NW.js(.js)及(不太推薦)。國(guó)內(nèi)有付費(fèi)的打包軟件,有錢的大佬可以用,比較省心,底層原理還是封裝了。
這里我選用的是。雖然NW.js和都可以跨平臺(tái)打包,但是你會(huì)才到無(wú)數(shù)坑。各有優(yōu)缺點(diǎn)吧,我個(gè)人比較喜歡前者。
但是我相信大家在用前端技術(shù)做桌面開(kāi)發(fā)的過(guò)程中,最大的痛苦就是瀏覽器的跨域問(wèn)題、同源問(wèn)題及其他安全性問(wèn)題,還有對(duì)系統(tǒng)原生API支持力度不夠。這里我就遇到了這樣一個(gè)問(wèn)題:
在頁(yè)面中的標(biāo)簽里的href屬性,點(diǎn)擊以后還是在內(nèi)置的瀏覽器(Chrome V8引擎)中跳轉(zhuǎn)并打開(kāi)多個(gè)頁(yè)面。而我想實(shí)現(xiàn)的是,點(diǎn)擊鏈接或者按鈕,會(huì)自動(dòng)跳轉(zhuǎn)到系統(tǒng)默認(rèn)瀏覽器中。
推薦方法
我在國(guó)內(nèi)網(wǎng)站上查閱了各種教程資料,只能感慨:1.治標(biāo)不治本,思路不算好;2.很多方法已經(jīng)過(guò)時(shí)了。經(jīng)過(guò)我查閱了國(guó)外大量文獻(xiàn)和教程,最終找到一種合適的辦法。這里推薦第一種:
1.前提是你的鏈接需要添加target="_blank"屬性才行;
2.然后在main.js主程序中添加shell請(qǐng)求,如下:
const { app, BrowserWindow, shell } = require('electron')
3.其次在 ()函數(shù)中新增一個(gè)函數(shù):
mainWindow.webContents.on('new-window', function(e, url) {
e.preventDefault();
require('electron').shell.openExternal(url);
})
原來(lái)的文件長(zhǎng)這樣:
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')
修改后的文件長(zhǎng)這樣(注意觀察文件的不同):
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)到電腦的默認(rèn)瀏覽器啦~
其他方法
其他方法我就不多說(shuō)了,簡(jiǎn)單描述一下,不同需求可能用到的方法不一樣。
方法一
您可以簡(jiǎn)單地使用:
//老外力薦的方法

require("shell").openExternal("http://www.google.com")
方法二
這個(gè)答案很老了,假設(shè)你有 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' };
});
方法四
要使所有 鏈接在默認(rèn) OS 瀏覽器中從外部打開(kāi),您必須向onclick它們添加一個(gè)屬性并更改該href屬性,以便它不會(huì)在 應(yīng)用程序中加載任何內(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 = "#";
}
但請(qǐng)確保在執(zhí)行此操作之前已加載整個(gè)文檔,否則它將無(wú)法正常工作。
更健壯的實(shí)現(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;
}
請(qǐng)記住,如果您加載外部文件,則必須在它們完全加載后也使它們經(jīng)歷此過(guò)程。
方法五
通過(guò)偵聽(tīng)主體,以下解決方案將適用于 運(yùn)行時(shí)可能尚不存在但僅在稍后出現(xiàn)在 DOM 中的標(biāo)簽。
這個(gè)需要 jQuery:
$('body').on('click', 'a', (event) => {
event.preventDefault();
require("electron").shell.openExternal(event.target.href);
});
您可以將選擇器更改為僅針對(duì)某些鏈接,例如'#-view a'或'a.open-'。
這是一個(gè)沒(méi)有任何庫(kù)的替代方案:
document.body.addEventListener('click', event => {
if (event.target.tagName.toLowerCase() === 'a') {
event.preventDefault();
require("electron").shell.openExternal(event.target.href);
}
});
方法六
我將此方法與 v.13 一起使用。
我們攔截用戶的導(dǎo)航(window.)并在默認(rèn)瀏覽器中打開(kāi) URL。
請(qǐng)參閱文檔:
const { shell } = require('electron');
window.webContents.on('will-navigate', function (e, url) {
e.preventDefault();
shell.openExternal(url);
});
方法七
關(guān)于tsx語(yǔ)法():
import { shell } from "electron";
shell.openExternal("http://www.google.com")
方法八
要在 的項(xiàng)目中打開(kāi)外部鏈接,您需要模塊 Shell () 和方法。
但是,如果您正在尋找一種實(shí)現(xiàn)該邏輯的抽象方法,那就是為您的目標(biāo)屬性創(chuàng)建一個(gè)自定義目標(biāo)的處理程序。
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++;
}
}
方法九
要在您的實(shí)際瀏覽器(Chrome、Mozilla 等)中運(yùn)行 項(xiàng)目,請(qǐng)將其添加到您的腳本是外部腳本:
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,當(dāng)我們找不到好的辦法的時(shí)候,學(xué)會(huì)去外面看看。
所有方法均來(lái)自 或 ,在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)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:
設(shè)置無(wú)線路由器的網(wǎng)址是多少 192.168.1.1主頁(yè)打不開(kāi)怎么辦
現(xiàn)在可是互聯(lián)網(wǎng)時(shí)代,家家都有電腦,筆記本、平板電腦等,而這些電子設(shè)備都需要連接網(wǎng)絡(luò),也只有購(gòu)買無(wú)線路由器才能實(shí)現(xiàn)一條網(wǎng)線,多種設(shè)備上網(wǎng)的需求,而購(gòu)買回來(lái)的無(wú)限路由器也需要進(jìn)行連接,那么設(shè)置無(wú)線路由器的網(wǎng)址是多少以及192.168.1.1主頁(yè)打不開(kāi)怎么辦呢,接下來(lái)就隨小編一起去了解下吧!
一、設(shè)置無(wú)線路由器的網(wǎng)址是多少:
很多家庭都會(huì)購(gòu)買無(wú)線路由器,而現(xiàn)在市場(chǎng)的無(wú)線路由器品牌就有tp-link路由器,騰達(dá)路由器,水星路由器,斐訊路由器,F(xiàn)AST迅捷路由器、小米路由器。不管您購(gòu)買的哪個(gè)牌子的路由器都需要登錄網(wǎng)頁(yè)進(jìn)行連接,而設(shè)置無(wú)線路由器的網(wǎng)址是192.168.1.1,這個(gè)網(wǎng)頁(yè)打開(kāi)成功后就能根據(jù)說(shuō)明書進(jìn)行無(wú)線路由器的設(shè)置。
二、192.168.1.1主頁(yè)打不開(kāi)怎么辦:
進(jìn)入設(shè)置無(wú)線路由器的網(wǎng)址是很關(guān)鍵的一步,如果主頁(yè)進(jìn)入不成功,那么意味著無(wú)線路由器將無(wú)法設(shè)置,那么192.168.1.1主頁(yè)打不開(kāi)應(yīng)該怎么辦呢:
1、192.168.1.1屬于IP地址的C類地址,是供無(wú)線路由器設(shè)置的專屬網(wǎng)址,同時(shí)也是屬于保留IP。簡(jiǎn)單的說(shuō)192.168.1.1就是無(wú)線路由器的設(shè)置網(wǎng)址,在瀏覽器網(wǎng)址欄中輸入就可以打開(kāi)路由器登陸管理頁(yè)面,進(jìn)行路由器設(shè)置。而且新買的無(wú)線路由器都需要通過(guò)192.168.1.1登陸路由器。
2、如果遇見(jiàn)192.168.1.1登陸之后,網(wǎng)頁(yè)打不開(kāi),那有可能是因?yàn)槟妮斎敕绞讲徽_,正確是輸入方式是192.168.1.1,,http:192.168.1.1,192 .168.1.1.這四種方式都是正確的,如果中間有空格,那么網(wǎng)頁(yè)進(jìn)入時(shí)也會(huì)打不開(kāi)。
3、使用http:和都可以,也可以直接輸入192.168.1.1,另外末尾多一位點(diǎn)也可以,即192.168.1.1.也可以登陸路由器。錯(cuò)誤的情況則是會(huì)出現(xiàn)這樣http :192.168.1.1,這樣是打不開(kāi)路由器登陸頁(yè)面。而且網(wǎng)址的小點(diǎn)是不能少的,這些輸入都是把小點(diǎn)漏掉了,同樣路由器登陸頁(yè)面打不開(kāi)。
4、有時(shí)候也會(huì)因?yàn)檩斎敕ǖ脑颍瑢?dǎo)致將小點(diǎn)按成了逗號(hào),這樣的網(wǎng)址是錯(cuò)誤的,也無(wú)法登陸192.168.1.1管理頁(yè)面。還有一種現(xiàn)象是喜歡加www,可能這樣的組合輸入習(xí)慣了,也會(huì)讓網(wǎng)頁(yè)登錄失敗。
小編小結(jié):文中小編為大家介紹了設(shè)置無(wú)線路由器的網(wǎng)址是多少以及192.168.1.1主頁(yè)打不開(kāi)怎么辦的相關(guān)知識(shí),大家可以參考一下。設(shè)置無(wú)線路由器的網(wǎng)址在正確輸入的情況,是能正常登錄的哦。
什么,裝修還用自己的錢?!齊家裝修分期,超低年利率3.55%起,最高可貸100萬(wàn)。立即申請(qǐng)享受優(yōu)惠
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。