PhoneGap / Cordova将appdelegate变量传递给JS

时间:2016-02-18 20:11:57

标签: javascript ios objective-c xcode cordova

我正在努力实现以下目标: 获取我的基于cordova的应用程序打开来自其他应用程序的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;
}

问题:

  1. 如果我寄回去,我可以使用该网址吗?在swift中,我有一个/ var / ...路径而不是file:// ... path!
  2. 如何将此网址发送为JS变量?
  3. 我知道如何在swift中做到这一点(几天前开始学习)但从未使用过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文件中调用它),将此变量发送回javascript,这要归功于cordova是另一个...而且我被困在两者。

1 个答案:

答案 0 :(得分:2)

这应该调用名为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;
}