簡體   English   中英

從某些網頁上托管的JavaScript調用Objective-C函數

[英]Calling an Objective-C function from JavaScript hosted on some web page

我有一個帶有Web瀏覽器的IOS應用程序。

顯示該Web瀏覽器時,它將導航到Internet上的頁面,例如http://myexample.com/myiosapp

是否可以在此網站上放置一個javascript代碼,將其下載到電話后與本機應用程序通信? 它可以調用Objective-C方法,還是向該應用程序的存儲空間寫入內容?

防爆。 托管在myexample.com/myios應用上的代碼:

function saveSomeString() {
    xcode.Save("somestring");
}

應該調用一個名為Save的Objective-C函數,它將傳入的字符串參數保存到本地存儲中。

是的,可以,但是有點黑。

在Objective-C方面:

基本上,在UIWebView中,您將使用方法shouldStartLoadWithRequest(來自UIWebViewDelegate),該方法應在URL請求開始之前被調用:

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

在Javascript方面:

您的JavaScript代碼將導航到“假” URL,您將根據上述方法進行過濾。 就像是:

window.location = "js2objc://save:param";

回到Objective-C方面:

在我前面提到的方法內,您尋找關鍵字js2objc(或選擇的任何一個),然后提取信息並采取任何適當的操作:

if([[url scheme] isEqualToString:@"js2objc"]){
    // extract the parameters and save them, o do whatever action you need
    return NO;  // so the UIWebView doesn't actually follow the url
}

暫無
暫無

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

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