1 背景
在檢查UI原型時,發現一個特別的問題:同一個打開新窗口的方法,在某個頁面中報參數錯誤(IE下)。
打開頁面的方法:
function OpenWindow(url, title, width, height) { var wWin = window.screen.width; var hHei = window.screen.height; var left = (wWin - width) / 2; var top = (hHei - height) / 2; var setting = 'width=' + width + ',height=' + height + ',top=' + top + ',left=' + left; setting += ',titlebar=yes,menubar=no,toolbar=no,location=yes,status=yes,scrollbars=yes,resizable=yes'; window.open(url, title, setting); }
方法調用正常的頁面JS代碼:
$(".port").click(function () { OpenWindow("../Common/CommonPort.html", "Port", 660, 550); });
方法調用錯誤的頁面JS代碼
$(".PickLot").click(function () { OpenWindow("SS_GoodsOut_PickUp.html", "Goods Out Lot Pick", 660, 550); });
報的錯誤是:Message: Invalid argument.通過這個錯誤提示,就知道最終window.open方法的參數有問題,但這兩個調用方法只有URL和TITLE不同,於是分別測試下。先測試URL,在報錯的頁面調用OpenWindow("../Common/CommonPort.html", "Port", 660, 550);。。。無問題,所以錯誤的地方就是TITLE。比較兩個TITLE,"Port", "Goods Out Lot Pick",有可能是第二個TITLE過長,或第二個參數有空格。當然最后測試是發現空格的問題。即把TITLE中的空格去掉即可。
這個太疼,於是乎在網上搜了下,發現除了空格有問題外,TITLE包含特殊字符時也會報錯。
2 深究
在發現空格與特殊字符都報錯后,想找下Window.Open方法說明,w3school的解釋如下:
window.open(URL,name,features,replace)
name: 一個可選的字符串,該字符串是一個由逗號分隔的特征列表,其中包括數字、字母和下划線,該字符聲明了新窗口的名稱。這個名稱可以用作標記 <a> 和 <form> 的屬性 target 的值。如果該參數指定了一個已經存在的窗口,那么 open() 方法就不再創建一個新窗口,而只是返回對指定窗口的引用。在這種情況下,features 將被忽略。
根據上面open的說明,可以知道name實際上是一個變量,指定的是新窗口的名稱,而不是新窗口的title。額,以前一直以為是新窗口的Title。希望看到這個博文的人也注意下這個小細節問題。
3 備注
Window.open方法測試(請在IE下哦,親)
正常:
有空格報錯:
有特殊字符報錯: