2012-01-27 47 views
1

其中一個異地第三方小部件的腳本在執行期間崩潰,並將我主頁上的所有流量重定向到他們的主頁。重定向的第三方腳本的全局攔截器

由於我不能殺死他們,我要麼必須殺死腳本,要麼找出一種方法來殺死第三方JavaScript可能使瀏覽器重定向的任何嘗試。我發現的最有希望的事件是.unload()window.onbeforeunload,我的想法是希望檢查GET請求,然後驗證URL是否與我的頁面上的任何有效鏈接不匹配,除非我不知道考慮到它不受限於頁面上的任何點擊或操作,但如何獲得事件的GET值,但在第三方的.js中是僞造的東西或其他東西?

任何人都有運氣找出這樣的解決方案嗎?

+0

爲什麼不修補第三方小部件,使其不重定向?我不認爲有任何方法可以「驗證」JavaScript的其他部分可能設置window.location的所有地方。 – jfriend00 2012-01-27 22:50:28

+0

,因爲它是企業級應用程序的第三方專有Web服務接口 - 它實際上不應該重定向,他們的事件報告也會像這樣:「我們不知道發生了什麼事或者爲什麼數百萬用戶被重定向到我們的主頁一個下午「試圖阻止未來再次發生任何第三方服務。 – HansOg 2012-01-28 21:22:30

回答

0

我不知道攔截第三方javascript可能設置的所有可能的位置window.location導致重定向並預檢它。這不是一種方法,它只是一個設置爲沒有方法替換/覆蓋的屬性。

頁面卸載事件只是讓您有機會詢問用戶他們是否真的想離開此頁面,但它無法訪問新的頁面目的地。

我唯一能想到的就是保持一個全局變量,它包含一個默認爲false的布爾值。在所有可能的地方,您可能會更改自己的代碼中的頁面,將該布爾值設置爲true。在onbeforeunload處理程序中,檢查全局變量以查看它是否代碼執行。如果它不是你的代碼所做的,你會從onbeforeunload返回一條消息,這樣用戶會被提示是否真的要離開。但是,你無法阻止它(這是故意的瀏覽器設計)。如果他們對提示說「是」,他們會將頁面留給新的目的地。

如果您或其他人能夠真正弄清楚爲什麼第三方無意中導致重定向,那麼也許您可以專注於確保條件不再發生,但您沒有給我們提供任何信息我們無法真正幫助。

+0

故意不討論任何解決方案,他們的腳本問題是減輕第三方snafu的想法,可能導致執行期間重定向。對不起,如果不明確。我感謝你的迴應!我希望我能夠在前端建立一個完全可怕的通用後衛,但實施這樣的解決方案對於我來說目前是不可行的。 – HansOg 2012-01-29 01:51:18