PhoneGap / Cordova 将 appdelegate 变量传递给 JS
Posted
技术标签:
【中文标题】PhoneGap / Cordova 将 appdelegate 变量传递给 JS【英文标题】:PhoneGap / Cordova pass appdelegate variable to JS 【发布时间】:2016-02-18 20:11:57 【问题描述】:我正在努力实现以下目标: 让我的基于科尔多瓦的应用程序打开来自其他应用程序的 pdf 文件并使用该文件显示该 pdf。最后,目标是将其上传到我的服务器。
我取得了以下成绩: - 应用程序显示在 pdf 文件的“打开方式”菜单中 - 应用程序启动并在 appdelegate.m 文件中,由于此代码,我得到了路径:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
if (url)
NSLog(@"The file contained: %@",url);
return YES;
问题:
-
如果我把它发回去,我可以使用那个 url 吗?很快,我有一个 /var/... 路径而不是 file://... 路径!
如何发送这个url变成JS变量?
我知道如何快速做到这一点(几天前开始学习),但从未使用过 Objective-c。 如果您有建议,我希望得到一个非常明确的答案,因为我不知道如何使用 Objective-c 方法,并且在不久的将来也不需要 Objective-c。
***** 编辑 *****
在一个纯 swift 项目中,我的 AppDelegate.swift 文件中有以下内容:
var file_url:NSURL!
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool
file_url = url
return true
然后在 ViewController.swift 中声明:
func displayLaunchDetails()
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
if appDelegate.file_url != nil
webview.loadRequest(NSURLRequest(URL: appDelegate.file_url))
稍后,在viewDidLoad()
函数中,我这样称呼它:
NSNotificationCenter.defaultCenter().addObserver(
self,
selector: "displayLaunchDetails",
name: UIApplicationDidBecomeActiveNotification,
object: nil)
在本例中,如果文件被传递到我的应用程序中,我会将 PDF 文件加载到 webView 中。
将它翻译成objective-c是一回事(我不知道如何在.m文件中调用它),由于cordova将这个变量发送回javascript是另一回事......我被困住了两者都有。
【问题讨论】:
您提到您知道在 Swift 中可以做什么,您可以添加这段代码吗?更容易理解你想要达到的目标,我可以轻松地将其“翻译”为目标 c 刚刚添加了一些代码,但是 swift 方法没有使用或与 cordova 和 javascript 交互。把这个url发回JS就是我这次需要的,很具体! @RobertoFerraz您熟悉phonegap(或本质上是cordova)吗?感谢您的帮助! 好的,我刚刚找到了一种将一些JS发送到cordova的方法......现在我的问题是将变量从我的AppDelegate.m文件发送到cordova子项目中的一些和到 CDVUIWebViewNavigationDelegate.m 文件... 【参考方案1】:这应该调用一个名为 doSomething
的 js 函数,将 url 作为参数传递。
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
if (url)
NSLog(@"The file contained: %@",url);
NSString * jsString = [NSString stringWithFormat:@"doSomething('%@');",url];
[self.viewController.webViewEngine evaluateJavaScript:jsString completionHandler:nil];
return YES;
【讨论】:
以上是关于PhoneGap / Cordova 将 appdelegate 变量传递给 JS的主要内容,如果未能解决你的问题,请参考以下文章
将横向限制在特定页面、jquery mobile、iOS、phonegap/cordova
将 twitter 数字与 cordova/phonegap 应用程序集成?
将使用相机拍摄的照片捕获并存储到本地数据库/PhoneGap/Cordova/iOS