0

Iphone/AndroidストアのPhonegapにラップしているjqueryモバイルアプリがあります。iframe を使用するページが 1 つありますが、これは Phonegap がなくても、期待どおりに機能します。ただし、ラップされると、実際には Iframe によってアプリが新しいウィンドウ/ブラウザーを開き、アプリを終了します。これに対する解決策があるかどうか誰かが知っていますか? ありがとう!

4

2 に答える 2

1

http://denrobapps.com/2010/12/phonegap-and-iframes/

まず、PhoneGapDelegate.m を開き、次のコード ブロックを見つけます。

- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSURL *url = [request URL];

/*
 * Get Command and Options From URL
 * We are looking for URLS that match gap://<Class>.<command>/[<arguments>][?<dictionary>]
 * We have to strip off the leading slash for the options.
 */
 if ([[url scheme] isEqualToString:@"gap"]) {

    InvokedUrlCommand* iuc = [[InvokedUrlCommand newFromUrl:url] autorelease];

    // Tell the JS code that we've gotten this command, and we're ready for another
    [theWebView stringByEvaluatingJavaScriptFromString:@"PhoneGap.queue.ready = true;"];

    // Check to see if we are provided a class:method style command.
    [self execute:iuc];

     return NO;
}

/*
 * If a URL is being loaded that's a local file URL, just load it internally
 */
else if ([url isFileURL])
{
    //NSLog(@"File URL %@", [url description]);
    return YES;
}

/*
 * We don't have a PhoneGap or local file request, load it in the main Safari browser.
 */
else
{
    //NSLog(@"Unknown URL %@", [url description]);
    //[[UIApplication sharedApplication] openURL:url];
    return NO;
}

return YES;
}

そのブロックの最初の if ステートメントのすぐ下に、この else-if を挿入します。

else if ([[url scheme] isEqualToString:@"http"])
{
    return YES;
}

また、[[UIApplication sharedApplication] openURL:url] が最後の else ステートメントでコメント解除されていることを確認してください (そうしないと、iFrame 内のリンクをクリックしても機能しません)。

else
{
    //NSLog(@"Unknown URL %@", [url description]);
    [[UIApplication sharedApplication] openURL:url];
    return NO;
}
于 2012-04-18T20:23:20.377 に答える
0

これは、phonegap がデフォルトで外部コンテンツを無効にし、組み込みのブラウザーを参照するためです。

これは、ファイル /res/xml/cordova.xml で修正できます。

右クリック -> テキスト エディターで開き、次の行を探します。

<access origin="http://127.0.0.1*"/> <!-- allow local pages -->
<!-- <access origin="https://example.com" /> allow any secure requests to example.com -->
<!-- <access origin="https://example.com" subdomains="true" /> such as above, but including subdomains, such as www -->
<!-- <access origin=".*"/> Allow all domains, suggested development use only -->

そこにあるドキュメントがそれ自体を物語っていると思います。複数のアクセスオリジンを許可することについてはわかりません(すべてのコードを同じサーバーでホストしています)。最初のファイルもそこに向けます。そのため、私はもう /assets/www を使用しません。

于 2012-04-19T19:59:39.437 に答える