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的主要内容,如果未能解决你的问题,请参考以下文章

Phonegap(cordova)将图像保存到自定义相册

将横向限制在特定页面、jquery mobile、iOS、phonegap/cordova

将 twitter 数字与 cordova/phonegap 应用程序集成?

将使用相机拍摄的照片捕获并存储到本地数据库/PhoneGap/Cordova/iOS

如何从另一个应用程序将图像共享到我的 Cordova/PhoneGap 应用程序?

如何将自定义平台添加到 Cordova 或 Phonegap