5

ページ間の遷移に push.js を使用して、Ratchet 2.0.2 で Phonegap アプリを開発しています。すべてがスムーズに機能していますが、数時間前にこれに出くわしました:

JavaScript を含むスクリプト タグは、push.js で読み込まれたページでは実行されません。イベント ハンドラーを他のページの要素にアタッチする場合は、ドキュメント レベルのイベント委任が一般的なソリューションです。

さらに調査を行った結果、次のことがわかりました: Ratchet\Push.js でページがロードされた後にカスタム スクリプトを実行する

これは私が抱えている問題とほぼ同じですが、1 つのスクリプトだけでなく 2 つ (おそらく将来的にはさらに多く) のスクリプトをロードする必要があるため、さらに先に進む必要があります。脚本?

var checkPage = function(){
    //Only run if twitter-widget exists on page
    if(document.getElementById('twitter-widget')) {
        loadTwitterFeed(document,"script","twitter-wjs");
    }
};

window.addEventListener('push', checkPage);
4

4 に答える 4

6

更新:この質問も参照してください。

これは私が試した解決策であり、正しく機能しているようですが、これが最善の方法であるかどうかについてのフィードバックを探しています...お気軽にコメントしてください。必要に応じて更新します. それが危険であることはわかっていeval()ますが、この場合の危険性はわかりません。

index\first ページで、ページの下部、div.contentの外側に次のスクリプトを配置して、 によって上書きされないようにしますpush.js

<script>
    window.addEventListener('push', function(){
        var scriptsList = document.querySelectorAll('script.js-custom');
        for(var i = 0; i < scriptsList.length; ++i) {
            eval(scriptsList[i].innerHTML);
        }
    });
</script>

次に、 経由で読み込まれる他のページでpush.js、スクリプトに のクラスを指定し.js-customます。このスクリプトは、div内に配置する必要があります.content

<div class="content">
    ...
    <script class="js-custom">
         alert('I was executed!');
    </script>
</div>

最初のスクリプトは、クラス<script>のタグを見つけてループし、.xml を使用してその内容を実行します。.js-customeval()

于 2014-04-26T21:59:01.683 に答える
1

push.js を使用しているときに、この問題の解決策を見つけました。私が最終的にやったのは、ロードしたい各htmlページに#descriptionを与えることです。これは、ページにリンクすると、contactlist.html#contact にリンクすることを意味します。

メインの HTML ページに、イベント リスナーを追加します。

 window.addEventListener('push', pageHandler);

次に、別のファイルでこのスクリプトを実行します。

var pageHandler= function(){
  var page= window.location.hash;

  if (page == '#contact'){
     //Put every script you want to use on this page here. 
  }
  if(page == '#info'){
    //Same here, every script you need for this page. 
  }
};

これが最善の方法かどうかはわかりませんが、スクリプトを適切に制御できるようになり、機能するようになりました。

于 2014-10-09T11:39:45.703 に答える
1

ここに私の考えを入れてください。各ページで個々の js が機能するように、Ratchet.js に変更を加えました。各 html には js ファイルがリンクされています。( https://github.com/mazong1123/ratchet-pro )

新しい ratchetPro.js を使用すると、次のことができます。

(function () {
    var rachetPageManager = new window.RATCHET.Class.PageManager();
    rachetPageManager.ready(function () {
        window.RATCHET.getScript('js/jquery.js', function () {
             // Put your logic here.
        });
    });
})();

window.RATCHET.getScript を呼び出して、外部 js を読み込みます。外部 js が読み込まれると、キャッシュされ、再度読み込まれることはありません。ただし、ページが切り替えられると、コールバックは常に実行されます。

于 2015-10-08T02:06:14.810 に答える