因为最近很忙,本来打算不断更新博客的。由于时间关系,因此更新较慢。
背景
因为最近有需求,想快速开发一个桌面端应用,最好是采用H5+JS+CSS3进行开发,这样效率最高。但是要知道,H5来开发桌面端,由于浏览器安全策略问题,是不可能直接给你调用本地系统API的,因此也出现了很多打包框架,国外免费的有(Github团队开发和维护)、NW.js(.js)及(不太推荐)。国内有付费的打包软件,有钱的大佬可以用,比较省心,底层原理还是封装了。
这里我选用的是。虽然NW.js和都可以跨平台打包,但是你会才到无数坑。各有优缺点吧,我个人比较喜欢前者。
但是我相信大家在用前端技术做桌面开发的过程中,最大的痛苦就是浏览器的跨域问题、同源问题及其他安全性问题,还有对系统原生API支持力度不够。这里我就遇到了这样一个问题:
在页面中的标签里的href属性,点击以后还是在内置的浏览器(Chrome V8引擎)中跳转并打开多个页面。而我想实现的是,点击链接或者按钮,会自动跳转到系统默认浏览器中。
推荐方法
我在国内网站上查阅了各种教程资料,只能感慨:1.治标不治本,思路不算好;2.很多方法已经过时了。经过我查阅了国外大量文献和教程,最终找到一种合适的办法。这里推荐第一种:
1.前提是你的链接需要添加target="_blank"属性才行;
2.然后在main.js主程序中添加shell请求,如下:
const { app, BrowserWindow, shell } = require('electron')
3.其次在 ()函数中新增一个函数:
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')
然后你的链接就可以愉快的跳转到电脑的默认浏览器啦~
其他方法
其他方法我就不多说了,简单描述一下,不同需求可能用到的方法不一样。
方法一
您可以简单地使用:
//老外力荐的方法

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);
});
方法三
代码片段根据 版本 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属性,以便它不会在 应用程序中加载任何内容。
你可以使用这样的方式:
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 = "#";
}
但请确保在执行此操作之前已加载整个文档,否则它将无法正常工作。
更健壮的实现如下所示:
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;
}
请记住,如果您加载外部文件,则必须在它们完全加载后也使它们经历此过程。
方法五
通过侦听主体,以下解决方案将适用于 运行时可能尚不存在但仅在稍后出现在 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);
});
方法七
关于tsx语法():
import { shell } from "electron";
shell.openExternal("http://www.google.com")
方法八
要在 的项目中打开外部链接,您需要模块 Shell () 和方法。
但是,如果您正在寻找一种实现该逻辑的抽象方法,那就是为您的目标属性创建一个自定义目标的处理程序。
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下获得许可
版权声明:本文为CSDN博主「」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:
设置无线路由器的网址是多少 192.168.1.1主页打不开怎么办
现在可是互联网时代,家家都有电脑,笔记本、平板电脑等,而这些电子设备都需要连接网络,也只有购买无线路由器才能实现一条网线,多种设备上网的需求,而购买回来的无限路由器也需要进行连接,那么设置无线路由器的网址是多少以及192.168.1.1主页打不开怎么办呢,接下来就随小编一起去了解下吧!
一、设置无线路由器的网址是多少:
很多家庭都会购买无线路由器,而现在市场的无线路由器品牌就有tp-link路由器,腾达路由器,水星路由器,斐讯路由器,FAST迅捷路由器、小米路由器。不管您购买的哪个牌子的路由器都需要登录网页进行连接,而设置无线路由器的网址是192.168.1.1,这个网页打开成功后就能根据说明书进行无线路由器的设置。
二、192.168.1.1主页打不开怎么办:
进入设置无线路由器的网址是很关键的一步,如果主页进入不成功,那么意味着无线路由器将无法设置,那么192.168.1.1主页打不开应该怎么办呢:
1、192.168.1.1属于IP地址的C类地址,是供无线路由器设置的专属网址,同时也是属于保留IP。简单的说192.168.1.1就是无线路由器的设置网址,在浏览器网址栏中输入就可以打开路由器登陆管理页面,进行路由器设置。而且新买的无线路由器都需要通过192.168.1.1登陆路由器。
2、如果遇见192.168.1.1登陆之后,网页打不开,那有可能是因为您的输入方式不正确,正确是输入方式是192.168.1.1,,http:192.168.1.1,192 .168.1.1.这四种方式都是正确的,如果中间有空格,那么网页进入时也会打不开。
3、使用http:和都可以,也可以直接输入192.168.1.1,另外末尾多一位点也可以,即192.168.1.1.也可以登陆路由器。错误的情况则是会出现这样http :192.168.1.1,这样是打不开路由器登陆页面。而且网址的小点是不能少的,这些输入都是把小点漏掉了,同样路由器登陆页面打不开。
4、有时候也会因为输入法的原因,导致将小点按成了逗号,这样的网址是错误的,也无法登陆192.168.1.1管理页面。还有一种现象是喜欢加www,可能这样的组合输入习惯了,也会让网页登录失败。
小编小结:文中小编为大家介绍了设置无线路由器的网址是多少以及192.168.1.1主页打不开怎么办的相关知识,大家可以参考一下。设置无线路由器的网址在正确输入的情况,是能正常登录的哦。
什么,装修还用自己的钱?!齐家装修分期,超低年利率3.55%起,最高可贷100万。立即申请享受优惠
*请认真填写需求信息,我们会在24小时内与您取得联系。