簡體   English   中英

javascript與Objective-c(IOS)之間的通信

[英]Communication between javascript and Objective-c (IOS)

我知道在iOS和javascript之間進行通信的方法是在JS中創建偽造的URL並附加一個字符串,該字符串將用作Objective-C代碼的參數,並在此委托方法中解析該URL:

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

然后,通過再次使用參數callID調用本機方法stringByEvaluatingJavaScriptFromString發送返回值。

但是我想像Android一樣,直接從JS調用Objective-C方法並獲取返回值。 無需在JavaSCript中編寫任何方法來獲取返回值。 實際上我們已經有了JS代碼。 與Android通信時,它可以完美運行。

是否有任何技巧可以解決我的問題,這些問題將在AppStore上得到批准?

沒有內置方法可以執行此操作,但是您可以使用WebViewJavascriptBridge之類的庫: https : //github.com/marcuswestin/WebViewJavascriptBridge

即使有內置的解決方案,對此也沒有標准。 因此,它與Android上的任何一種方式都不一樣。 與Obj-C代碼進行通信意味着您正在離開瀏覽器,轉而使用平台特定的實現,這些實現在不同平台之間自然有所不同。

您可以使用簡單的步驟從目標C調用javascript方法。

請仔細閱讀此內容,另請參閱Apple文檔

如果我正確理解了您想從Java腳本調用Objective-c方法的問題,那么下面是我從Apple文檔中引用的示例:-

讓我們看一個示例類。 在這種情況下,我們將創建一個Objective-C通訊簿類,並將其公開給JavaScript。 讓我們從類定義開始:

@interface BasicAddressBook: NSObject {
}
+ (BasicAddressBook *)addressBook;
- (NSString *)nameAtIndex:(int)index;
@end

現在,我們將編寫代碼以將BasicAddressBook實例發布到JavaScript:

BasicAddressBook *littleBlackBook = [BasicAddressBook addressBook];

id win = [webView windowScriptObject];
[win setValue:littleBlackBook forKey:@"AddressBook"];

將這些方法暴露給JavaScript(在本節末尾介紹)后,您應該能夠從JavaScript環境訪問基本地址簿,並使用標准JavaScript函數對其執行操作。

現在,讓我們做一個示例,展示如何在JavaScript中使用BasicAddressBook類實例。 在這種情況下,我們將在地址簿中的某個索引處打印人的名字:

function printNameAtIndex(index) {
    var myaddressbook = window.AddressBook;
    var name = myaddressbook.nameAtIndex_(index);
    document.write(name);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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