[英]Calling UIViewController from a JavaScript Function
我試圖從我的項目中的JavaScript函數調用UIViewController。 我被要求對此應用程序進行一些更改,在這里我需要調用一個新的UIViewController。 我找到了可以調用JavaScript函數的位置,但是我需要另辟and徑,並打開上面帶有一些文本的UIViewController。 有沒有人有關於如何使用Xcode項目代碼執行此操作的示例?
謝謝。
對於簡單的調用,我將使用JSBridge 。 這需要通過添加一個JSBridge.js頭文件來修改JavaScript端。 我已經對其進行了測試,並且可以正常工作。
一般的想法是javascript可以重定向您實際瀏覽的地址。 發生本機回調時- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
使用特殊的包含命令的URL調用- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
。 該URL是從javascript傳遞的,然后您可以在回調中解析此URL並調用適當的操作。
通常來說,您可以創建自己的JSBridge功能,它應該像這樣工作:
當您要執行任何命令時,在JavaScript中調用:
window.location.href =“ command:// goToHomeViewController”
在使用該javaScript加載該頁面的webView的代表中,您對命令進行了鈎子。
在您的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中被攔截,然后在ViewController本機代碼中執行該命令,並返回否,即webView取消加載頁面。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.