2012-01-11 46 views
1

不使用我的子類NSURLProtocoldidFinishLaunchingWithOptions與此代碼註冊它:定製NSURLProtocol排在第二的WebView

+ (void) registerProtocol 
{ 
    static BOOL registered = NO; 

    if (!registered) 
    { 
     [NSURLProtocol registerClass:[MyURLProtocol class]]; 
     registered = YES; 
    } 
} 

對於我的應用程序的第一UIWebView(在主窗口)canInitWithRequest被觸發的方法,和我可以執行我的自定義代碼。

但是我有第二個UIWebView,這是在應用程序中的某個點(模態地顯示)推送的UIViewController中。 canInitWithRequest將不會被調用第二個UIWebView,因此我不能執行我的自定義代碼。當協議在創建UIWebView的兩個實例後註冊時,情況甚至如此。

任何人都知道爲什麼?

d'oh!我只是發現它只是在一個被加載在第二的WebView :( 的作品就像一個魅力在這兩個網頁視圖現在的JavaScript一個普通的錯誤!

+0

問題不在於註冊您的協議。你只需要註冊一次。我很想知道你是如何在UIWebView中加載你的請求的。例如,你在調用[webView loadRequest:request]。 – jimmyg 2012-01-11 23:14:47

+0

實際上,請求是從javascript/ajax調用中觸發的,我試圖在canInitWithRequest中攔截它。適用於第一個webview,不適用於第二個webview :( – user826955 2012-01-12 07:15:22

+0

你能提供一些你發現的修復的細節嗎?即使它是一個特定於你的應用的js錯誤,我遇到了同樣的問題,我的頭髮試圖找出問題。 – 2012-11-02 14:35:18

回答

2

不知道這是否與您的情況和解決辦法,但對於發佈記錄今天發現經過大量的試驗和磨難後,如果你希望不止一次地發送相同的url,那麼發送一個消息給NS被一個NSURLProtocol的子類攔截的目標c的ajax調用應該被設置爲false。所以:

$.ajax({ 
     url:"atavistcommand://" + name, 
     data:JSON.stringify(data), 
     type:"GET", 
     processData:false, 
     cache:false)}; 

如果緩存= true,那麼目標C將永遠不會收到關於同一URL後續請求