7

JQM と Phonegap を使用して iOS にデプロイするアプリを作成しています。オブジェクト 'window.location.search' を処理することにより、一般的な Web サイトの URL 引数が JavaScript で行うように、入力引数を読み取る必要があります。

私の状況では、アプリは次のように Web サイトから起動されます。

<a href="myapp://?arg1=1&arg2=2"> My App </a>

これは現在機能しています。すでにアプリを呼び出すことができます。今必要なのは、引数 arg1、arg2 などを読み取ることです。window.location.search を読み取ろうとしましたが、うまくいきませんでした。

これどうやってするの?Objective C コードを書く必要はありますか?

任意の提案をいただければ幸いです。

ありがとう。

4

5 に答える 5

6

私の問題は、このリンクのコンテンツを使用して解決されました: https://gist.github.com/859540

コードは次のとおりです。

Objective-c の部分:

MainViewController.m で:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // perform any custom startup stuff you need to ...
        // process your launch options
    NSArray *keyArray = [launchOptions allKeys];
    if ([launchOptions objectForKey:[keyArray objectAtIndex:0]]!=nil) 
    {
               // we store the string, so we can use it later, after the webView loads
        NSURL *url = [launchOptions objectForKey:[keyArray objectAtIndex:0]];
        self.invokeString = [url absoluteString];
        NSLog(@amp;" launchOptions = %@",url); // if you want to see what is happening
    }
    // call super, because it is super important ( 99% of phonegap functionality starts here )
    return [super application:application didFinishLaunchingWithOptions:launchOptions];
}


- (void) webViewDidFinishLoad:(UIWebView*) theWebView 
{
     // only valid if ___PROJECTNAME__-Info.plist specifies a protocol to handle
     if (self.invokeString)
     {
        // this is passed before the deviceready event is fired, so you can access it in js when you receive deviceready
        NSString* jsString = [NSString stringWithFormat:@"var invokeString = \"%@\";", self.invokeString];
        [theWebView stringByEvaluatingJavaScriptFromString:jsString];
     }

     // Black base color for background matches the native apps
     theWebView.backgroundColor = [UIColor blackColor];

    return [super webViewDidFinishLoad:theWebView];
}

cordova-1.7.0 を使用した index.html ファイル:

function onDeviceReady()
    {
        alert(invokeString);
    }

アラートが返されました: myapp://?arg1=1&arg2=2

それを呼び出すために使用されるのと同じ文字列... :)

于 2012-09-16T01:29:59.910 に答える
0

window.location は、アプリの起動に使用された URL ではなく、phonegap index.html ファイルの場所になります。

一部の Web 検索では、次の関数が呼び出されていることが示唆されました。

function handleOpenUrl(url) {
   alert("opened from url " + url);
}

.. 自動的に呼び出される場合があります。ただし、テストするための開発マシンがここにありません。申し訳ありません。

これが Objective-C で機能しない場合は、AppDelegate.m の handleOpenUrl メソッドを確認してください。これは、アプリが URL スキームで開かれたときに呼び出されます。

于 2012-09-14T21:17:59.773 に答える
0

obj-c で実行し、プラグインを使用して javascript コードに渡す必要があります。最初に obj-c で実行するには、実装する必要があります

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    NSURL *urlToParse = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey];
        if (urlToParse) {
            [self application:application handleOpenURL:urlToParse];
        } 
        return YES;
}

次に、次のようなパラメーターにアクセスできます。

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    if ([[url scheme] isEqualToString:@"myapp"]) {
        //in here you do whatever you need the app to do
        // e.g decode JSON string from base64 to plain text & parse JSON string
    }
 return YES; //if everything went well
}
于 2012-09-15T07:20:16.423 に答える
0
function getParameterByName(name)
{
  name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
  var regexS = "[\\?&]" + name + "=([^&#]*)";
  var regex = new RegExp(regexS);
  var results = regex.exec(window.location.href);
  if(results == null)
     return "";
  else
     return results[1];
  }
Call this function like var para1 = getParameterByName("para1"); 
on pageshow event in jquery mobile.
$('#page').on('pageshow',function(event){
   var para1 = getParameterByName("para1");
});
于 2013-09-30T13:41:38.010 に答える