2014-09-19 174 views
0

好吧,使用一個UsersScript,我該如何檢測並停止頁面重定向?我不擁有網頁來源。JavaScript/jQuery腳本阻止重定向

以下是在頁面上通常發生:

  1. 用戶點擊一個鏈接
  2. 通過AJAX服務器頁面檢查通過發送關於鏈接的一些數據點擊到PHP頁面
  3. PHP頁面明確回覆某些內容,因爲那時用戶會被重定向到另一個頁面。

那麼,仍然允許AJAX請求在步驟2中經過,那麼如何通過使用用戶腳本來阻止用戶的重定向呢?

從我的理解,window.onbeforeunload真的只是通過在用戶移動頁面之前給出一個對話框有所幫助 - 我不想要這個,我想默默地阻止重定向。

編輯:我認爲window.stop()將努力從改變阻止頁面,但檢測到它會改變可能是一個挑戰......

document.location.href = 'http://www.something.com'; 
window.stop(); 

似乎工作。但檢測到location.href正在改變?

+0

您想在點擊鏈接時阻止重定向嗎? – 2014-09-19 06:15:21

+0

不完全。當你點擊鏈接時,它會發送一個至關重要的AJAX查詢。只有當AJAX查詢成功時纔會有重定向。 – Edge 2014-09-19 06:22:18

+0

你能發佈更多的代碼嗎?說,這個鏈接是如何設置的? – 2014-09-19 06:23:36

回答

-3

默認情況下,一個普通的鏈接是加載另一個頁面的請求,並且該請求與您點擊鏈接後可能會執行的任何操作無關。但是,您不必使用普通的鏈接;看看這個:

<a style="color:#0000ff;text-decoration:underline;cursor:pointer;" 
onclick="window.name='here';window.open('http://www.example.com/newpage.htm', 
'here');">New Page</a> 

這HTML代碼看起來就像一個普通的鏈接,和工作完全像一個普通的鏈接,到一個新的頁面加載到當前頁面。但它實際上是一個JavaScript *結構,這意味着你可以攔截它做其他的事情,比如:

<a style="color:#0000ff;text-decoration:underline;cursor:pointer;" 
onclick="window.name='here';intercept();">New Page</a> 

現在,您可以編寫一個名爲「截距()」 JavaScript函數,以決定是否要加載新的頁面(做你的AJAX調用)。如果你決定要加載新的頁面,那麼你只需要做到這一點的AJAX回調函數中:

window.open('http://www.example.com/newpage.htm','here'); 

如果你有在頁面上的多個鏈接,只需在intercept()功能 - 指定參數調用(即,intercept('newpage.htm');intercept('altpage.htm');intercept('diffpage.htm');),然後在攔截函數內部簡單地將接收到的字符串放入全局變量中,以便AJAX回調函數內的函數調用可以使用全局變量打開正確的新頁面。

*用戶當然必須在瀏覽器中啓用JavaScript才能使鏈接工作。但是之後JavaScript也需要啓用AJAX才能工作,所以,這不是一個問題。

+0

我沒有擁有該網站並且無法控制其來源。這似乎不像它回答我的問題。 – Edge 2014-09-19 06:52:20

+0

然後你需要解決你的問題,因爲你沒有說你無法控制頁面內容,而且我的答案對於像你所描述的那樣存在問題的任何人都是非常好的,並且可以控制頁面內容 - 內容。 – vernonner3voltazim 2014-09-19 10:05:58

+1

我認爲這很直觀,因爲我希望在用戶腳本中執行此操作,而不是頁面內容腳本。 – Edge 2014-09-20 01:32:53