[英]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代碼進行通信意味着您正在離開瀏覽器,轉而使用平台特定的實現,這些實現在不同平台之間自然有所不同。
如果我正確理解了您想從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.