2012-11-20 66 views
0

這實在讓我很煩。我有一個webView,我試圖讓它加載drive.google.com。但是,由於該網站上的重定向量很大,webView無能爲力。我知道加載一個webView的代碼工作,並且該URL是正確的,因爲我得到了didFailWithProvisionalLoadWithError消息。這就是我知道這是重定向問題。如何覆蓋webView可以處理的重定向量。 Obj-C,可可

我已經看遍了所有,但無法找到任何方法來改變允許重定向的數量。我知道這是可能的,因爲Safari可以處理它。必須有某種委託方法才能覆蓋。今天沒有任何代碼,因爲我所有的搜索(4天價值)都沒有讓我失望。

如果有人有想法,請告訴我。僅供參考,這是Cocoa(WebView)而不是可可觸摸(UIWebView)。謝謝。

回答

3

,你一直在爲其搜索是

– webView:decidePolicyForNavigationAction:request:frame:decisionListener:

這是WebPolicyDelegate協議的一部分。

閱讀WebPolicyDelegate的文檔,特別是關於此代表方法的討論。 WebPolicyDecisionListener的文檔描述了您可以發送給偵聽器的消息。你可以在這個委託方法中標識一個重定向,並且你可以指示決策監聽器使用或忽略它。

編輯:

我很欣賞的50分,但是如果我不幫你解決你的問題,我幾乎覺得我值得他們,這就夠了內疚激勵我坐下來試試解決你的問題。

我構建了一個小應用程序,一個不基於文檔,或者使用ARC或垃圾收集。我在MainMenu.xib文件中關閉了自動佈局,並簡單地在其中放置了一個WebView實例。我修改了AppDelegate以包含WebView實例的出口。

我然後創建充實的-applicationDidFinishLaunching:存根這樣的:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    NSString *urlString = @"http://drive.google.com"; 
    NSURL *url = [NSURL URLWithString:urlString]; 
    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url]; 

    [[[self webView] mainFrame] loadRequest:urlRequest]; 
} 

,如果我得到重定向,他們似乎並沒有成爲影響我的顯示頁面的能力。

我們是否在同一頁上(沒有雙關語意)?

編輯2:

好消息(或壞消息,這取決於你的POV):重定向從來不是問題(儘管他們的確有助於闡明什麼是真的要點亮)。

說到Google Drive,WebView並不是一個被認可的瀏覽器。但是,您可以通過修改用戶代理字符串來修復(N.B.,如下)。下面是修改後的代碼:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    NSString *urlString = @"http://drive.google.com"; 
    NSURL *url = [NSURL URLWithString:urlString]; 

    NSString *customUserAgent = [NSString stringWithFormat:@"%@ Version/6.0.2 Safari/8536.26.17", [[self webView] userAgentForURL:url]]; 

    [[self webView] setCustomUserAgent:customUserAgent]; 

    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url]; 

    [[[self webView] mainFrame] loadRequest:urlRequest]; 
} 

N.B:用戶界面似乎是全功能的,但即便如此,谷歌可能會改變確定瀏覽器是什麼力所能及,打破這個方案,所以考慮自己的警告。您可能需要探索他們的SDK,以獲取訪問Google雲端硬盤的其他方式。

一如既往,在您的努力中祝您好運。

+0

不幸的是,我將需要比這多一點的信息。雖然這種方法似乎是正確的,但我找不到任何消息發送它會改變重定向限額。如果有人知道要發送什麼信息,我將不勝感激。 – Josiah

+1

這是你應該實施的信息。網絡視圖會詢問它的代表是否應該繼續重定向。由代表決定是否允許。 –

+0

那麼,如果這是正確的委託消息,那麼我該如何處理呢?很顯然,當我不知道該如何放置該方法時,重寫某些內容並不是我的好處。 – Josiah

0

根據Apple文檔中的WebView引用類,您必須設置一個符合webframeloaddelegate協議的委託。

[webView setFrameLoadDelegate:object]; 

然後在對象,你必須設置這個方法:

- (void)webView:(WebView *)sender willPerformClientRedirectToURL:(NSURL *)URL delay:(NSTimeInterval)seconds fireDate:(NSDate *)date forFrame:(WebFrame *)frame