2010-03-09 32 views
1

在JavaScript中使用window.open()時,href的正確跨瀏覽器編碼是什麼?首先,我用正確編碼href用於JavaScript中的window.open()

var href = "http://127.0.0.1:8000/etf/admin/escola/t34atividade/?pop=1&copy=1"; 
var win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes'); 

IE8打開:http://127.0.0.1:8000/etf/admin/escola/t34atividade/?pop=1©=1

火狐打開:http://127.0.0.1:8000/etf/admin/escola/t34atividade/?pop=1&copy=1

var href = "http://127.0.0.1:8000/etf/admin/escola/t34atividade/?pop=1&copy=1"; 
var win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes'); 

IE8打開:http://127.0.0.1:8000/etf/admin/escola/t34atividade/?pop=1&copy=1

火狐打開:http://127.0.0.1:8000/etf/admin/escola/t34atividade/?pop=1&copy=1

回答

0

我發現的最簡單的解決方案是停止使用copy作爲GET參數。問題是&copy實際上是版權符號的HTML實體。即使使用JavaScript代碼,IE也會將實體替換爲符號。 Firefox顯然不執行實體替換。根據這個博客中的評論IE的做法可能是正確的,但爲了避免所有的混亂,我只是將我的參數重命名爲clone

http://nedbatchelder.com/blog/200812/accidental_html_entities_in_urls.html

2

使用JavaScript對於URI的每個URI的「encodeURIComponent」函數是而不是 URI語法的一部分(即分隔符斜槓,查詢字符串的問號,參數分隔符&符號等)。

URI編碼是不是與HTML轉義一樣。例如,您不會在URL中跳過&符號&

+0

+1爲正確的答案。我在下面添加了一些背景信息。本來可以在評論中加入它,但我無法從實體中獲得正確的行爲。 – Robusto 2010-03-09 14:55:12

+1

我不明白。你能提供一個例子嗎?當我將字符串「copy」傳遞給encodeURIComponent()時,它不會執行任何操作,當我傳遞字符串「&」時,它將它編碼爲新的URL中的%26,這不是我想要的。我想在GET複製和彈出兩個參數都設置爲1。 – user27478 2010-03-09 15:12:58

1

IE8似乎試圖強迫查詢字符串參數&副本= 1到實體&副本;,這是版權符號(©)。這實際上很有趣。就像微軟用「幫助」來阻止用戶一樣。

Pointy對於編碼是正確的。還要小心,你沒有一個代碼縮小器,在一對雙斜線(//)後刪除一行中的所有內容;我以前看過那些殘骸頁面。