2012-02-08 80 views
1

我有一個基於WebKit的應用程序。當用戶啓動一個打開新頁面的動作(例如點擊鏈接)時,我想攔截該URL並選擇在我的應用程序中打開它,或者將它踢出Safari。如何在Cocoa WebView中識別用戶發起的請求?

理想情況下,我想識別加載順序中的第一個請求,或者直接由用戶操作導致的第一個請求。或者,如果我能夠識別對框架中頂級URL的更改,則可能就足夠了,但要注意,如果我決定將其反彈到Safari,我需要能夠取消該請求。

我已經實現了webView:decidePolicyForNavigationAction:request:frame:decisionListener,並且我可以看到加載頁面期間所做的所有請求。用戶觸發的請求以及由Javascript,REST調用啓動的那些請求都是如此。

對於簡單鏈接,我可以從操作信息中獲取WebActionNavigationType。但是,如果用戶使用Javascript onclick()處理程序點擊一個元素,而該處理程序依次導航到不同的頁面,則導航類型將爲「其他」,並且與其他所有Javascript請求(即來自原始的次要REST調用請求)。

任何人都解決了這個問題?任何指針?謝謝!

回答

0

我想出了一些似乎適用於我的東西。在決定政策導航行動中,此測試將確定它是否是用戶發起的操作:

BOOL isUserAction = (
    [frame isEqual:[sender mainFrame]] && 
    [[request URL] isEqualTo:[actionInformation objectForKey:WebActionOriginalURLKey]] 
);