2012-10-21 50 views
1

我想打電話給我的項目內的一個JavaScript函數的調用的UIViewController UIViewController中。我被要求對這個應用做一些改變,我需要調用一個新的UIViewController。我已經找到了可以調用JavaScript函數的位置,但我需要以其他方式進行操作,並打開一個帶有一些文本的UIViewController。有沒有人有如何使用Xcode項目代碼做到這一點的示例?從一個JavaScript函數

謝謝。

回答

0

對於簡單的電話,我會用JSBridge。這需要通過添加一個JSBridge.js頭文件來修改您的JavaScript端。我測試過它,它工作。

總的想法是,JavaScript可以重定向你實際上瀏覽地址。當發生本地回調- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType時,將使用包含特殊命令的URL進行調用。該URL從JavaScript傳遞,然後您可以在回調中解析此URL並調用適當的操作。

一般來說,你可以使自己的JSBridge功能,它應該像這樣工作:

  1. 在你的JavaScript時要執行任何命令,調用:

    window.location.href = 「命令:// goToHomeViewController」

  2. 在網頁視圖的委託,其加載的頁面與該JavaScript你犯了一個鉤你的命令。

在你ViewController.m

(BOOL)webView:(UIWebView *)p_WebView shouldStartLoadWithRequest:(NSURLRequest *)request   navigationType:(UIWebViewNavigationType)navigationType 
{ 

    BOOL result = YES; 
    NSString *urlString = [[request URL] absoluteURL]; 
    if ([urlString compare:@"command://goToHomeViewController"] == NSOrderedSame) 
    { 
     result = NO; 
     [self goToHomeViewController]; 
    } 

    return result;  
} 

這種方式,你有你的shouldStartLoadWithRequest攔截命令,然後在您的視圖控制器本地代碼執行命令,並返回NO該webView的取消加載頁面。

+0

謝謝,但我不知道這正是我所期待的。此外,我試圖下載並運行JSBridge例子,他們談論我需要的JSON框架,他們說,這是包括在內,但事實並非如此。我找不到要安裝的框架。我不想跳回到UIWebView,我需要從Javascript跳回到標準的UIViewController。你知道這是可能的嗎?再次感謝。 – Jon

+0

您需要攔截傳入的URL並將其轉變爲如上所示的命令。 –

+0

我認爲我在這裏是正確的,並感謝你的幫助。現在唯一想到的就是在代碼的哪裏放置上面的代碼。在MainViewController中,shouldStartLoadWithRequest被註釋掉。該應用程序使用科爾多瓦(又名PhoneGap),它具有ChildBrowser和ASIHTTPRequest。我一直負責爲新的UIViewController添加跳轉。如果您有任何其他想法,他們將不勝感激。再次感謝! – Jon

相關問題