Пользовательское событие uncaugth reference error не определяется в файле ratchet

Привет, я новичок в структуре телефонных разговоров и трещоток. Я пытаюсь загрузить внешний скрипт с помощью push.js. Вот содержимое моего файла js

function init(){
    document.addEventListener('deviceready', onDeviceReady, false);

    function onDeviceReady(){

        alert("device ready for use");
        }
       var checkPage = function(){

        alert("push");
        var scriptName; 
        var scriptsList = document.querySelectorAll('script.js-custom');  // Add a "js-custom" class to your script tag
        for (var i = 0; i<scriptsList.length;i++) {

            // Handle scripts in separate files by assigning the script file name to its id.
            // We save it in a variable because the ".done" callback is asynchronous.
            scriptName = scriptsList[i].id;  // IMPORTANT: Only one loadable script per page!
            $.getScript("js/" + scriptName)
              .done(function (script, textStatus) {
                  eval(script);
                  alert("ok");
              })
              .fail(function(){
                  alert("error");
              });

        }


    };   

    window.addEventListener('push', checkPage);

    } 

Вот мой html файл

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">  
    <title>Ratchet template page</title>

    <!-- Sets initial viewport load and disables zooming  -->
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, minimal-ui">

    <!-- Makes your prototype chrome-less once bookmarked to your phone's home screen -->
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">

    <!-- Include the compiled Ratchet CSS -->
    <link href="css/ratchet.min.css" rel="stylesheet">

    <!-- Include the compiled Ratchet JS -->
    <script src="js/ratchet.min.js"></script> 
    <script src="js/jquery.js"></script>
     <script src="cordova.js"></script>

  </head>
  <body onload="init()">  

    <!-- Make sure all your bars are the first things in your <body> -->
    <header class="bar bar-nav">
      <h1 class="title">Ratchet</h1>
    </header>

    <!-- Wrap all non-bar HTML in the .content div (this is actually what scrolls) -->
    <div class="content">

      <div class="card">
        <ul class="table-view">
          <li class="table-view-cell">

            <a class="push-right" href="two.html">
              <strong>Another page</strong>
            </a>
          </li>  
          <li class="table-view-cell"> 
            <a class="push-right" href="https://github.com/twbs/ratchet/">
              <strong>Ratchet on Github</strong>
            </a>

      </div>
    </div>

Вот мой файл two.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Notes</title>
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, minimal-ui">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">

    <!-- Roboto
    <link rel="stylesheet" href="//fonts.googleapis.com/css?family=Roboto:400,500,700"> -->

    <link rel="stylesheet" href="ratchet.min.css">
    <script src="ratchet.min.js"></script>
  </head>
  <body>
      <header class="bar bar-nav">
  <h1 class="title">Two</h1>
    </header>
  </body>
  <div class="content">
  <script src="js/sample.js" class="js-custom" id="sample.js"></script>
  </div>
</html>

Но я запускаю проект, который получаю

Uncaught ReferenceError: CustomEvent is not defined at file:///android_asset/www/js/ratchet.min.js:10

пожалуйста, помогите мне.


person iam batman    schedule 30.08.2014    source источник


Ответы (2)


У вас нет кордовы во втором файле HTML. Когда вы загружаете two.html, ваш браузер уничтожает предыдущую страницу и все связанные с ней скрипты. Вы должны делать все на одной странице, я предлагаю использовать структуру mvvm, такую ​​как angularjs, emberjs и т. Д.

Итак, если быть точным, ваш второй html не имеет кордовы, поэтому deviceready никогда не запускается для этого файла. Однако для первого HTML у вас есть ссылки deviceready и ratchet. Но там у вас нет ссылки на sample.js с js-custom. Итак, внутри deviceready (когда в первом html) ваш храповик жалуется на отсутствие ссылки на js-custom.

person mentat    schedule 30.08.2014
comment
Но я загружал в устройство несколько раз работает правильно, иногда нет - person iam batman; 30.08.2014
comment
сначала добавьте кордову. затем храповик - person Mohammed Imran N; 30.08.2014
comment
пожалуйста, прочтите мой ответ, я обновил и указал на точную проблему в вашем коде (я полагаю). - person mentat; 30.08.2014
comment
отлично работает с data-ignore = push, но мне нужно нажимать вместе с настраиваемым скриптом - person iam batman; 30.08.2014
comment
Вы можете дать на это ответ? (stackoverflow.com/questions/25831459/) - person iam batman; 14.09.2014

Это потому, что в реализации WebView отсутствует window.CustomEvent.

Добавьте этот полифилл, и он будет работать каждый раз. Я нашел решение в сети разработчиков Mozilla:

/*
 * Polyfill for adding CustomEvent
 * see : https://developer.mozilla.org/fr/docs/Web/API/CustomEvent
 */

if (!window.CustomEvent) { // Create only if it doesn't exist
    (function () {
        function CustomEvent ( event, params ) {
            params = params || { bubbles: false, cancelable: false, detail: undefined };
            var evt = document.createEvent( 'CustomEvent' );
            evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );
            return evt;
        };

        CustomEvent.prototype = window.Event.prototype;

        window.CustomEvent = CustomEvent;
    })();
}
person Régis FLORET    schedule 02.09.2014