谷歌浏览器不能使用opener属性的问题和解决

我先放一个简化的案例:

父页面:

<html>
<head>
<title>HTML_CSSS</title>
<script type="text/javascript">
function open_func() {
window.open("user.html","width=250","height=150");
}
</script>
</head>
<body>
编号: <input type="text" id="numid"/><br/>
姓名: <input type="text" id="nameid"><br/>
<input type="button" value="选择" οnclick="open_func()"/>
</body>
</html>


子页面:

<html>
<head>
<title>USER</title>
</head>
<body>
<table>
<tr>
<td>操作</td>
<td>编号</td>
<td>歌名</td>
</tr>
<tr>
<td><input type="button" value="选择" οnclick="s1('100','光辉岁月')"></td>
<td>100</td>
<td>光辉岁月</td>
</tr>
<tr>
<td><input type="button" value="选择" οnclick="s1('101','冷雨夜')"></td>
<td>101</td>
<td>冷雨夜</td>
</tr>
<tr>
<td><input type="button" value="选择" οnclick="s1('102','海阔天空')"></td>
<td>102</td>
<td>海阔天空</td>
</tr>
</table>

<script type="text/javascript">
function s1(num1,name1) {
var pwin = window.opener;
pwin.document.getElementById("numid").value = num1;
pwin.document.getElementById("name1").value = name1;
window.close();
}
</script>

</body>
</html>


症状:能弹出子页面没毛病,但问题是谷歌浏览器在子页面上点击选择按钮毫无反应,IE上需要通过允许,Firefox问题.

原因:是opener属性的缘故,但不是谷歌浏览器的兼容性问题,首先要知道js安全机制原则上是不能访问本地文件的,并且谷歌浏览器的安全设置级别比较高,认定你在"本地"应用opener属性的时候是通过js打开本地文件,所以操作被截止.

但是,在实际开发环境中是不会产生这个问题的,因为当把页面文件部署到服务器上,通过谷歌浏览器输入  localhost/******   或者   127.0.0.1/******  访问该页面,是没有毛病的。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
可以使用 Node.js 中的 `shell` 模块来执行系统命令,达到打开浏览器的目的。具体步骤如下: 1. 安装 `opener` 模块,它可以在任何平台下打开网页。 ```bash npm install opener --save ``` 2. 在 Electron 主进程中使用 `opener` 执行打开链接的命令。如果系统中有 Google Chrome 浏览器,则用 Chrome 打开链接;否则使用系统默认浏览器打开链接。 ```javascript const { shell } = require('electron'); const opener = require('opener'); // 在 Electron 主进程中 const openLink = (url) => { if (shell.which('google-chrome')) { // 如果系统中有 Google Chrome 浏览器,则使用 Chrome 打开链接 opener(`${url}`, { command: ['google-chrome'] }); } else { // 否则,使用系统默认浏览器打开链接 shell.openExternal(`${url}`); } }; ``` 在渲染进程中,可以使用 `ipcRenderer` 将链接发送给主进程,然后在主进程中执行打开链接的函数。 ```javascript // 在 Electron 渲染进程中 const { ipcRenderer } = require('electron'); const openLink = (url) => { ipcRenderer.send('open-link', url); }; ``` 在主进程中监听 `open-link` 事件,然后调用打开链接的函数。 ```javascript // 在 Electron 主进程中 const { ipcMain } = require('electron'); ipcMain.on('open-link', (event, url) => { if (shell.which('google-chrome')) { // 如果系统中有 Google Chrome 浏览器,则使用 Chrome 打开链接 opener(`${url}`, { command: ['google-chrome'] }); } else { // 否则,使用系统默认浏览器打开链接 shell.openExternal(`${url}`); } }); ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值