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