1. 程式人生 > >谷歌瀏覽器不能使用opener屬性的問題和解決

谷歌瀏覽器不能使用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="選擇" onclick="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="選擇" onclick="s1('100','光輝歲月')"></td>
<td>100</td>
<td>光輝歲月</td>
</tr>
<tr>
<td><input type="button" value="選擇" onclick="s1('101','冷雨夜')"></td>
<td>101</td>
<td>冷雨夜</td>
</tr>
<tr>
<td><input type="button" value="選擇" onclick="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/******  訪問該頁面,是沒有毛病的。