我目前正在iPad上開發一個基於JavaScript的小型繪圖應用程序。我簡單地將它包裝在UIWebView中,如this。現在的事情是,我無法弄清楚如何從應用程序保存圖像,以便它存儲在iPad照片上。如何使用iPad上的JavaScript/Obj-C將圖像保存到照片庫?
有沒有一些簡單的方法來銜接JavaScript代碼和Objective-C?我想我可以傳遞一個包含來自JS端的PNG圖像數據的字符串,然後使用Objective-C以某種方式將其保存到照片庫。
我目前正在iPad上開發一個基於JavaScript的小型繪圖應用程序。我簡單地將它包裝在UIWebView中,如this。現在的事情是,我無法弄清楚如何從應用程序保存圖像,以便它存儲在iPad照片上。如何使用iPad上的JavaScript/Obj-C將圖像保存到照片庫?
有沒有一些簡單的方法來銜接JavaScript代碼和Objective-C?我想我可以傳遞一個包含來自JS端的PNG圖像數據的字符串,然後使用Objective-C以某種方式將其保存到照片庫。
是的,有一種方法可以將JavaScript從UIWebView橋接到Obj-C代碼。
設置你的UIWebView的委託,並在委託貼在下面的方法
//
// Map links starting with file://
// ending with #action
// with the action of the controller if it exists.
//
// Open other links in Safari.
- (BOOL)webView: (UIWebView*)webView shouldStartLoadWithRequest: (NSURLRequest*)request navigationType: (UIWebViewNavigationType)navigationType {
NSString *fragment, *scheme;
if (navigationType == UIWebViewNavigationTypeLinkClicked) {
[webView stopLoading];
fragment = [[request URL] fragment];
scheme = [[request URL] scheme];
if ([scheme isEqualToString: @"file"] && [self respondsToSelector: NSSelectorFromString(fragment)]) {
[self performSelector: NSSelectorFromString(fragment)];
return NO;
}
[[UIApplication sharedApplication] openURL: [request URL]];
}
return YES;
}
然後,你可以寫的OBJ-C的方法是將處理該請求。例如。在你的web視圖中,你可能有一個鏈接標籤的按鈕,如
<a href="file://myGreatApp.com/saveImage">Click Me to Save Image </a>
該方案是「文件」的片段是「saveImage」。您現在可以編寫Obj-C方法
-(void)saveImage;
每次用戶單擊鏈接時都會調用該函數。
編輯: 如果您想在您的方法中傳遞字符串參數,只需使用javascript將它們附加到您的片段url。所以相反,你可能有
<a href="file://myGreatApp.com/saveImage*asdgo8asdgl35lkjasgd807ll12">Click Me to Save Image </a>
然後在你的Obj-C代碼中,在char'*'上分割片段。使用前半部分作爲選擇器,後半部分作爲參數。
任何想法如何從JS應用程序傳遞數據(只是一個字符串)Obj-C?我可能在這裏忽略了一點。不過謝謝你的回答。 :) –
使用char分隔符並將其附加到您的片段。所以使用javascript來動態創建鏈接href文件://myGreatApp.com/saveImage*imgdataimgdataimgdataimgdata。然後在obj c代碼中,你會用'*'分割片段。前半部分變爲您的選擇器'saveImage',而後半部分變爲您在選擇器中傳遞的字符串對象。 – Andrew
我最終使用這個解決方案,http://blog.techno-barje.fr/post/2010/10/06/UIWebView-secrets-part3-How-to-properly-call-ObjectiveC-from-Javascript。 –