10

バックグラウンド

Cordova 2.0 でビルドされた iOS アプリをバージョン 2.7にアップグレードしようとしています。

これは基本的に、リモート検索エンジンを指すウェルカム画面です (アプリの有効性と承認の可能性についてのコメントは控えてください。それは過ぎているためです)。 Cordova の Web ビューでユーザーをトラップします。

Cordova 2.7 には、 ChildBrowser の代わりに使用したいと考えているInAppBrowserという機能があります。InAppBrowser は、Safari で開くボタンがないことを除けば、基本的に同じことを行います。

問題

既存のアプリのリモート Web ページには、Cordova JS (および ChildBrowser プラグイン用のもの) が含まれており、サブ ブラウザーでリンクを開くのに問題なく動作します。

私のテスト用 Cordova 2.7 アプリは、リモート Web ページからロードされているときに、Cordova JS を正しくロードしていないようです。

埋め込みスタート ページとリモート スタート ページで、まったく同じ HTML を使用してみました。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <script type="text/javascript" src="http://mydomain.com/mobile/cordova-2.7.0.js"></script>
  </head>
  <body>
    <script>
      document.addEventListener("deviceready", onDeviceReady, false);
      function onDeviceReady() {
        alert("Ready!!");
      }
    </script>
  </body>
</html>

これを埋め込み開始ページとしてテストするために、次の行を に入れましたconfig.xml

<content src="index.html" />

アプリを実行すると、すぐに「Ready!」が表示されます。アラート。

これをリモート スタート ページとしてテストするには (最終的なアプリでリモート ページにリンクすることを目指しています。テスト用のスタート ページとして使用しているだけです。埋め込みページからリンクしても結果は同じです。) 、私はこの行を入れましたconfig.xml

<content src="http://mydomain.com/mobile/index.php" />

アプリを実行すると、空白の画面が表示され、アラートは表示されません。

さらにcordova-2.7.0.jsL.6255では、

console.log('deviceready has not fired after 5 seconds.');

alert('deviceready has not fired after 5 seconds.');

この変更により、リモート スタート ページを使用してアプリを実行すると空白のページが表示され、5 秒後に「deviceready has not fired after 5 seconds.」というアラートが表示されます。これは、Cordova JS が正しく起動していないことを示しています。言うまでもなく、リモート サイトのサブ ブラウザで InAppBrowser にリンクを起動させることはできませんが、埋め込まれたスタート ページでは問題なく動作させることができます。

ここからどこへ行くべきか考えている人はいますか?これは非常に単純な例なので、これは Cordova の設定の問題か、機能の変更であると想定しています。ご意見ありがとうございます。

4

6 に答える 6

3

Cordova 2.7 へのアップグレードに関しても同様の問題がありました。ただし、私の問題は、アプリの実行中にすべての console.logs が起動しなくなったことです。なぜこれが私の人生で起こっているのか理解できませんでした。jquery.mobileをアップグレードしたからだと思いました。そうではありませんでした。私はそれが .htaccess の問題だと思っていましたが、それもそうではありませんでした。この問題を引き起こしたのは Cordova 2.7 であることが判明しました。

サーバーに .json ファイルを追加しようとしましたが、問題は解決しませんでした。

修正は 2.7 ソースに入り、次のコードをコメントアウトしていました。

/*comment out this as it is breaking console.logs
    var xhr = new context.XMLHttpRequest();
    xhr.onload = function() {
        // If the response is a JSON string which composes an array, call handlePluginsObject.
        // If the request fails, or the response is not a JSON array, just call finishPluginLoading.
        var obj = this.responseText && JSON.parse(this.responseText);
        if (obj && obj instanceof Array && obj.length > 0) {
            handlePluginsObject(obj);
        } else {
            finishPluginLoading();
        }
    };
    xhr.onerror = function() {
        finishPluginLoading();
    };
    xhr.open('GET', 'cordova_plugins.json', true); // Async
    xhr.send();
    */

ブロック全体を次の関数の呼び出しに置き換えます。

finishPluginLoading();

ログが再び機能するようになりました。頭をかいて3日しかかかりませんでした。

これが同様の問題を抱えている人に役立つことを願っています。

于 2013-05-22T22:15:30.927 に答える
0

私のように、Cordova 5.1.1 を使用していて、リダイレクト後にネイティブ機能にアクセスしたい場合は、cordova.js、cordova_plugins.js、および \platforms\platform_name\assets\www\ にある plugins フォルダーをコピーしてサーバーに配置し、最後に参照します。あなたのhtml内のcordova.js。プラグインを追加するたびに、これらのファイルとフォルダーを必ず更新してください。

于 2015-09-03T10:47:14.007 に答える
0

Shazron が述べたように、問題はファイル「cordova_plugins.json」の問題です。

コードを変更しない問題を解決するには、ルート フォルダーに "cordova_plugins.json" ファイルを作成し、このファイル内の引用符の間にコンテンツを挿入します。たとえば、私のものには次のコンテンツがあります。

"Just a dummy file required since Cordova 2.6.0"
于 2013-05-08T05:15:46.833 に答える
0

Cordova を外部 Web ページに埋め込むと、ハイブリッド アプリ内から InAppBrowser を開く方法がないため、Cordova を読み込むことができなくなります。これは、InAppBrowser を使用してリモート ページをフェッチする前に、Cordova を完全にロードして初期化する必要があるためです。持っている HTML ページを使用する必要があります。<script type="text/javascript" src="http://mydomain.com/mobile/cordova-2.7.0.js"></script>アプリのメイン エントリ ポイントとして。次に、InAppBrowser を使用してリモート ページを開くことができます。(おそらく onDeviceReady() でこれを行うことができますが、最初にページを「フラッシュ」するかどうかはわかりません。)リモートページに Cordova コードを含める必要はまったくないと思います。Same Origin Policy により、リモート ページから Cordova と対話することさえ可能かどうかはわかりません (おそらく、InAppBrowser の機能を使用して「ブリッジ」コードを挿入することで、これを回避できます)。

于 2013-05-01T13:04:44.243 に答える