我想打電話給我的項目內的一個JavaScript函數的調用的UIViewController UIViewController中。我被要求對這個應用做一些改變,我需要調用一個新的UIViewController。我已經找到了可以調用JavaScript函數的位置,但我需要以其他方式進行操作,並打開一個帶有一些文本的UIViewController。有沒有人有如何使用Xcode項目代碼做到這一點的示例?從一個JavaScript函數
謝謝。
我想打電話給我的項目內的一個JavaScript函數的調用的UIViewController UIViewController中。我被要求對這個應用做一些改變,我需要調用一個新的UIViewController。我已經找到了可以調用JavaScript函數的位置,但我需要以其他方式進行操作,並打開一個帶有一些文本的UIViewController。有沒有人有如何使用Xcode項目代碼做到這一點的示例?從一個JavaScript函數
謝謝。
對於簡單的電話,我會用JSBridge。這需要通過添加一個JSBridge.js頭文件來修改您的JavaScript端。我測試過它,它工作。
總的想法是,JavaScript可以重定向你實際上瀏覽地址。當發生本地回調- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
時,將使用包含特殊命令的URL進行調用。該URL從JavaScript傳遞,然後您可以在回調中解析此URL並調用適當的操作。
一般來說,你可以使自己的JSBridge功能,它應該像這樣工作:
在你的JavaScript時要執行任何命令,調用:
window.location.href = 「命令:// goToHomeViewController」
在網頁視圖的委託,其加載的頁面與該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的取消加載頁面。
謝謝,但我不知道這正是我所期待的。此外,我試圖下載並運行JSBridge例子,他們談論我需要的JSON框架,他們說,這是包括在內,但事實並非如此。我找不到要安裝的框架。我不想跳回到UIWebView,我需要從Javascript跳回到標準的UIViewController。你知道這是可能的嗎?再次感謝。 – Jon
您需要攔截傳入的URL並將其轉變爲如上所示的命令。 –
我認爲我在這裏是正確的,並感謝你的幫助。現在唯一想到的就是在代碼的哪裏放置上面的代碼。在MainViewController中,shouldStartLoadWithRequest被註釋掉。該應用程序使用科爾多瓦(又名PhoneGap),它具有ChildBrowser和ASIHTTPRequest。我一直負責爲新的UIViewController添加跳轉。如果您有任何其他想法,他們將不勝感激。再次感謝! – Jon