簡體   English   中英

從JavaScript函數調用UIViewController

[英]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功能,它應該像這樣工作:

  1. 當您要執行任何命令時,在JavaScript中調用:

    window.location.href =“ command:// goToHomeViewController”

  2. 在使用該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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM