26

PhoneGap を使用して iPad 用のアプリケーションを作成しています。Safari を起動したり、ChildBrowser などの内部 Web ブラウザを使用したりせずに、外部 URL をロードしたいと考えています。

私は PhoneGap iPad/iPhone サンプル プロジェクトを使用しており、さまざまなアプローチを試みました。onBodyLoad() 関数に追加しました:

window.location.href('http://www.wordreference.com'); 

ただし、この行は新しい Safari ウィンドウを使用してリンクを開きます。その時点から、PhoneGap に戻ることはできません。

その後、document.writeを使用してページのコンテンツを置き換えるAJAXリクエストを試しました

function loadHTML(url, timeout) {
if (timeout == undefined)
    timeout = 10000;
var req = new XMLHttpRequest();
var timer = setTimeout(function() {
    try {
        req.abort();
    } catch(e) {}
    navigator.notification.loadingStop();
},timeout);
req.onreadystatechange = function() {
    if (req.readyState == 4) {
        if (req.status < 300) {
            clearTimeout(timer);

            var html = req.responseText;
            //just a debug print   
    alert(html);
    document.write(html);

        }
        navigator.notification.loadingStop();
        delete req;
    }       
};          
req.open('GET', url, true);
req.send();
}

次に、onBodyLoad() 内から呼び出します。

loadHTML('http://www.wordreference.com',10000); 

PhoneGap コンテナでリンクを開きます。これで問題ありません。ポイントは、Pythonで書かれた動的ページを読み込みたいということです

loadHTML('http://www.mysite.com/cgi-bin/index.py',10000)

この時点で Safari は呼び出されませんが、PhoneGap コンテナー内の黒いページが表示されます!! Safari で入力した場合、リンクは完全に機能していることを指摘したいと思います (プライバシーの問題で報告できません)。

ある種の必要な許可に関連する問題でしょうか???

BlackBerry の PhoneGap に関連するものを見つけました。提案された解決策は、config.xml ファイルを次のように変更することでした。

<access subdomains="true" uri="http://www.mysite.com/" />

このタグを index.html に直接追加しようとしましたが、うまくいきません。

iPhoneに同様のアプローチはありますか??

どうもありがとう

4

5 に答える 5

23

私は解決策を見つけたと思います、

PhoneGap Application Delegate .m ファイル {YourProject}AppDelegate.mで、メソッドを次のように変更します。

- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
return [super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType];
}

- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
 NSURL *url = [request URL];
if ([[url scheme] isEqualToString:@"http"] || [[url scheme] isEqualToString:@"https"]) {
    return YES;
}
else {
return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ];
}
}

これにより、PhoneGap コンテナー内のすべての外部リンクが開きます!!!

ps。あなたの周りにはこのリンクへの参照がありますが、Safari はデフォルトで外部リンクに対して開かれるため、バージョン 0.9.5 を使用して作成されたアプリでは機能しないと思います。

于 2011-05-09T09:06:46.407 に答える
10

Android でこの問題が発生している場合:

以前のバージョンについては知りませんが、PhoneGap 1.1.0 では、res/xml/phonegap.xmlというファイルを作成し、外部ブラウザで開くべきではないドメインを一覧表示できます。

DroidGap.javaから:

 /**
 * Load PhoneGap configuration from res/xml/phonegap.xml.
 * Approved list of URLs that can be loaded into DroidGap
 *      <access origin="http://server regexp" subdomains="true" />
 * Log level: ERROR, WARN, INFO, DEBUG, VERBOSE (default=ERROR)
 *      <log level="DEBUG" />
 */
private void loadConfiguration() {
[...]

phonegap.xml :

<?xml version="1.0" encoding="UTF-8"?>
<phonegap>
    <access origin="http://stackoverflow.com" subdomains="true" />
</phonegap>
于 2011-10-14T13:46:52.320 に答える
2

これは機能します-クラウスに感謝します。たぶん、いくつかのアプリは単に「http」と「https」よりも区別する必要があります。

私はphonegapandroidで同様のことをしました。以下を参照してください。インターフェイス(ここではEXTERNALLINKと呼びます)を提供し、javascriptからloadExternalLinkを呼び出し、そのURLを現在のWebViewにロードします。私は専門家ではありませんが、私のために、そしてあなたがそれを適用したいリンクのためだけに働いているようです。

アクティビティ:

public class AndroidActivity extends DroidGap {  
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    try
    {
      super.loadUrl("file:///android_asset/www/index.html");  
      this.appView.addJavascriptInterface(new JavaScriptInterface(), "EXTERNALLINK"); 
    }
    catch(Exception lException)
    {
      throw new RuntimeException("hello hello", lException);
    }
  }

  class JavaScriptInterface
  {
      public void loadExternalLink(String lUrl)
      {          
        try
        {
          loadUrl(lUrl);
        }
        catch(Exception lEx)
        {
          int i = 0;
        }
      }
  }
}

JavaScript呼び出しの例:

window.EXTERNALLINK.loadExternalLink("http://www.google.com");

于 2011-09-23T13:06:14.727 に答える
2

Android では、ページ遷移中に画面が真っ暗になる問題を回避するために、PhoneGap 1.1.0 の時点で次のように記述できます。

super.setIntegerProperty("backgroundColor", Color.WHITE);
super.setStringProperty("loadingPageDialog", "Loading page...");

DroidGap アクティビティの onCreate() メソッドの super.loadUrl の前。

詳細が記載されている PhoneGap ディスカッション フォーラムへの参照を次に示します。

http://comments.gmane.org/gmane.comp.handhelds.phonegap/11491

于 2011-10-19T01:50:33.563 に答える
1

Android では、外部リンクを設定して webview 内で開くことができます。

super.setBooleanProperty("loadInWebView", true);

DroidGap アクティビティの super.loadUrl の前。

これにより、すべての外部リンクが webview で開かれます。Web ビューで特定のドメインのみを開きたい場合は、代わりに addWhiteListEntry を使用してください。例:

addWhiteListEntry("mydomain.com", true);
于 2011-10-15T16:44:30.247 に答える