2012-08-17 50 views
3

我在這裏有兩種情況。PhoneGap iOS自定義URL方案,當應用程序不在後臺?

一個是,我的應用程序在iPad上的背景中處於活動狀態。如果我去Safari瀏覽器並點擊一個鏈接與我的URL方案,應用程序打開並顯示一個警告與URL。

這就是我想要的!

第二種情況是應用程序處於非活動狀態而不在後臺。這裏應用程序啓動,但警報從不顯示。我可以從「didFinishLaunchingWithOptions」中提醒URL,但我需要在我的JavaScript函數中使用它:handleOpenURL(url)。

在我看來,我的AppDelegate.m中的handleOpenURL只在App在後臺時被觸發。有沒有辦法讓它在沒有在後臺運行的情況下執行相同的操作?

這裏是我的OBJ-C handleOpenUrl:

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); 
} 

現在,當應用程序最初啓動時,它運行didFinishLaunchingWithOptions:

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

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

self.viewController.invokeString = invokeString; 

我應該修改didFinishLaunchingWithOptions方法,使其運行handleOpenURL ?

回答

1

我想通了。我錯過了onDeviceReady函數中的一個調用:

if (invokeString) handleOpenURL(invokeString); 
+0

爲InvokeString錯誤獲取錯誤:物業invokeString不是類型CDVViewController – 2015-02-17 13:20:57

+0

的對象中找到@Turan嘗試閱讀這篇文章,主要是關於部分「修復警告」:HTTPS://iphonedevlog.wordpress。 com/2012/09/24/phonegap-2-1-0-mac-os-x-mountain-lion-10-8-from-download-to-ios-app-store/ – casper60 2015-02-18 14:16:09

2

您可以輕鬆地理清這個問題。

在 「CDVHandleOpenURL.m」 文件你需要改變代碼,如下

的NSString * jsString = [NSString的stringWithFormat:@「document.addEventListener( 'deviceready',函數(){如果(typeof運算handleOpenURL == ='function'){handleOpenURL(\「%@ \」);}});「,url];

的NSString * jsString = [NSString的stringWithFormat:@ 「如果(typeof運算handleOpenURL === '功能'){handleOpenURL(\」 %@ \ 「);}其他{window._savedOpenURL = \」 %@ \「;}」,url,url];

這將工作完美。

最好的運氣

+1

花點時間閱讀通過幫助中心的[編輯幫助](http://stackoverflow.com/editing-help)。堆棧溢出的格式與其他站點不同。 – Rizier123 2016-03-19 09:48:25

+0

請不要在多個問題上發佈相同的答案。發佈一個很好的答案,然後投票/標記以重複關閉其他問題。如果問題不是重複的,*定製你對問題的答案。* – Rizier123 2016-03-19 09:48:31

+0

謝謝它對我有用.... – 2016-03-19 10:07:27

相關問題