2011-11-12 51 views
5

我注意到我的Javascript書籤在Google Reader和Google搜索結果頁面(以及某些非Google網站上的某些網站)上失敗。望着控制檯,我看得出來,這些頁面,點擊書籤沒有追加要素頭/身體像它一般沒有,但創造了一個看起來像這樣的新文件:Javascript書籤在某些網站上失敗,創建了幽靈般的新版本<html>頁面

<html> 
    <head></head> 
    <body></body> 
</html> 

即使我將我的小書籤縮小爲javascript:alert(window.location.href);它會創建此空白頁並在其中運行小書籤,以便警報顯示about:blank。在大多數網站上,未創建此空白頁面並顯示正確的位置。

有人可以解釋這一點嗎?這些網站是否在沙盒外部運行代碼作爲安全措施?

UPDATE:我目前無法在除Chrome 17.0.932.0開發以外的瀏覽器上重現此操作。請讓我知道是否有其他人可以在Chrome或其他平臺上重現這些結果。

+0

我不能再現您的發現。哪個瀏覽器造成麻煩? –

+0

令人驚歎。我可以發誓這是發生在瀏覽器,但現在我只能在Chrome開發中重現它。除非其他人可以在其他瀏覽器中複製,否則請暫時擱置此問題。 – glortho

+0

您是否正在通過小書籤或位置欄中的粘貼進行測試? –

回答

1

您需要確保最上面的代碼,即javascript:之後的最後一個代碼不會返回任何內容。

通常這是包裝的一切void()完成:

javascript:void(alert(window.location.href)); 

這是非常奇怪的是,它與alert()打破雖然因爲函數本身不返回任何東西......

+0

謝謝,ThiefMaster。我確實用無效嘗試了它,並得到了相同的結果。在Chrome開發中仍然經常使用它。在FF和書籤中打開它=沒問題。必須在Chrome穩定版中嘗試更多並向他們報告。 – glortho

1

如果一個javascript: url返回一個字符串,它將用於創建一個新文檔:

javascript:'foo bar baz'; 

這可能是一個棘手的問題,如果您不知道要警惕它的調試。它可以裁剪,如果你使用的是返回一個字符串的函數或與設置一個字符串值,行結束您的書籤:

javascript: a = prompt('foo bar baz'); b = a; 

一個簡單的解決方案是使用封閉:

javascript:(function(){ var a; a = prompt('foo bar baz'); window.b = a}()); 

的替代方法是以void 0;

javascript: a = prompt('foo bar baz'); b = a; void 0; 
相關問題