3

我这里有两种情况。

一是,我的应用程序在我的 iPad 上处于后台活动状态。如果我去 safari 并单击带有我的 URL 方案的链接,应用程序将打开并显示带有 URL 的警报。

这就是我要的!

第二种情况是应用程序处于非活动状态,而不是在后台。应用程序在此处启动,但从未显示警报。我可以从“didFinishLaunchingWithOptions”中提醒 URL,但我需要在我的 JavaScript 函数中使用它:handleOpenURL(url)。

在我看来,我的 AppDelegate.m 中的 handleOpenURL 仅在应用程序处于后台时才会触发。有没有办法让它在不在后台运行时做同样的事情?

这是我的 obj-c 句柄OpenUrl:

if (!url) { return NO; }

// calls into javascript global function 'handleOpenURL'
NSString* jsString = [NSString stringWithFormat:@"window.setTimeout(function(){ handleOpenURL(\"%@\"); }, 1)", url];
[self.viewController.webView stringByEvaluatingJavaScriptFromString:jsString];

// all plugins will get the notification, and their handlers will be called 
[[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:CDVPluginHandleOpenURLNotification object:url]];

return YES;

它应该输出到这个 javascript 函数:

function handleOpenURL(url) { 
    alert('invoke: ' + url);
}

现在,当 App 最初启动时,它会运行 didFinishLaunchingWithOptions:

NSURL* url = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey];
NSString* invokeString = nil;

if (url) {
    invokeString = [url absoluteString];
    NSLog(@"iPaperReeder launchOptions = %@", url);
}

self.viewController.invokeString = invokeString;

我应该修改 didFinishLaunchingWithOptions 方法,使其运行 handleOpenURL 吗?

4

2 回答 2

2

您可以轻松解决这个问题。

在“CDVHandleOpenURL.m”文件中,您需要更改代码如下

NSString* jsString = [NSString stringWithFormat:@"document.addEventListener('deviceready',function(){if (typeof handleOpenURL === 'function') { handleOpenURL(\"%@\");}});",网址];

NSString* jsString = [NSString stringWithFormat:@"if (typeof handleOpenURL === 'function') { handleOpenURL(\"%@\");} else { window._savedOpenURL = \"%@\"; }", url , 网址];

这将完美地工作。

祝你好运

于 2016-03-19T09:29:49.107 回答
1

我想到了。我错过了 onDeviceReady 函数中的一个调用:

if (invokeString) handleOpenURL(invokeString);
于 2012-08-21T15:51:06.743 回答