2012-02-29 59 views
1

我已經創建了一個IOS應用程序。哪種方法應該注入JavaScript? (stringByEvaluatingJavaScriptFromString)

該應用程序具有MainViewController,它將呈現/解除來自webViewController的模態視圖 nib文件(包含NavBar和UIWebView)。我想在UIWebView加載的每個網頁中注入我的JavaScript函數,這些函數將在網頁中調用,這意味着所有函數必須在頁面加載完成之前完成加載。

我嘗試了很多方法,但它看起來像當ModalView再次呈現時(它在第一次呈現時工作正常)。該頁面不知道我的注入函數。

所以我的問題是:

  • 我應該在哪裏注入我的javascript如果UIWebView的負載請求時,ModalView禮物? loadRequest之前? didStartLoad? didFinishLoad?
  • 關閉ModalView時應該如何處理UIWebView?加載about:空白請求?

感謝您的閱讀和任何幫助/建議。 :)

回答

1

哪裏應該注入我的JavaScript如果UIWebView加載請求時,ModalView目前? loadRequest之前? didStartLoad? didFinishLoad?

webViewDidFinishLoad:。在此之前,您不能撥打stringByEvaluatingJavaScriptFromString:。不幸的是,沒有好的方法可以在不顯示Web視圖的情況下實現這一點,如果您的JavaScript改變了太多內容,有時會導致視圖「閃爍」。有時我會在網頁視圖中添加一個額外的視圖來隱藏它,直到webViewDidFinishLoad:完成。

關閉ModalView時應該如何處理UIWebView?加載about:空白請求?

什麼都沒有。它應該在模態視圖發佈時發佈。

+0

感謝羅布:),我會嘗試一下。我只是擔心網頁會在注入之前調用這些函數,並且會導致js崩潰。 – pbserious 2012-03-01 03:20:15

+0

你不能使用'stringByEvaluatingJavaScriptFromString:'完全解決這個問題。 onload事件會在你運行任何東西之前觸發。如果您必須在onload之前注入代碼,那麼您必須在下載時修改HTML本身。你可以用NSURLProtocol來做到這一點,但修改任意HTML總是很危險。 – 2012-03-01 20:42:35

0

哪裏應該注入我的JavaScript如果UIWebView加載請求時,ModalView目前? loadRequest之前? didStartLoad? didFinishLoad?

我想你的情況,如果用戶點擊一些你的目標鏈接或HTML元素,那麼mainViewController將出現presentModalView方法,對吧? (如果它不請指正)
正如上面的情況,你可以調用JavaScript在UIWebviewDelegate這樣

-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType 
{ 
    NSString *url = [[inRequest URL] absoluteString]; 

    /* separate your href string such as href="doMyFunction?presentView" */ 
    NSArray *comp1 = [url componentsSeparatedByString:@"?"]; 
    NSString * checker = [comp1 objectAtIndex:1]; 
    if([checker isEqualToString:@"presentView"]) 
    { 
     // do my code 
    } 
} 

我應該做的UIWebView什麼時候解散ModalView?加載about:空白請求?

你的MainView已經掩蓋你的UIWebView所以這取決於你的目的一樣

  • 變化的一些信息
  • 隱藏一些組件
  • 沒有任何

希望它可以幫助你!

相關問題