Почему Cordova (PhoneGap) не возвращает данных из canvas.toDataURL (), тогда как тот же код работает за пределами Cordova? - PullRequest
0 голосов
/ 03 марта 2020

У меня есть тестовый фрагмент кода ниже, который использует библиотеку SignaturePad JS.

Этот код прекрасно работает в браузере (без ссылок на кордову), но в Cordova canvas.toDataURL() ничего не возвращает. Я использую рабочий стол PhoneGap для разработки, и поэтому приложение cordova работает в браузере (кстати, тот же браузер, который возвращает правильный вывод при простом открытии файла html напрямую, без phonegap / cordova).

<html>
  <head>
    <meta charset="utf-8" />
    <meta name="format-detection" content="telephone=no" />
    <meta name="msapplication-tap-highlight" content="no" />
    <meta
      name="viewport"
      content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width"
    />
  </head>

  <body>
    <div class="app">
      <canvas class="test-canvas"></canvas>
      <button class="test-btn">Log DataURL</button>
    </div>
    <script type="text/javascript" src="cordova.js"></script>
    <script type="text/javascript" src="js/index.js"></script>
    <script
      src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"
      type="text/javascript"
    ></script>
    <script src="https://cdn.jsdelivr.net/npm/signature_pad@2.3.2/dist/signature_pad.min.js"></script>

    <script type="text/javascript">
      app.initialize();
      document.addEventListener("deviceready", onDeviceReady, false);
      function onDeviceReady() {
        $(document).ready(function() {
          var canv = $(".test-canvas");
          canv.css({ border: "1px solid black" });
          var sigPad = new SignaturePad(canv[0]);

          $(".test-btn").click(function() {
            console.log(canv[0].toDataURL());
          });
        });
      }
    </script>
  </body>
</html>

Пример вывода после подписания в окне браузера: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...

Вывод в cordova: ``

Я читал о некоторых людях, борющихся с toDataURL () в Cordova, но они Возможно, это связано с политиками CORS et c, но я не получаю никаких ошибок при использовании кода и не обращаюсь к внешним изображениям et c.

1 Ответ

0 голосов
/ 03 марта 2020

Я нашел свою ошибку. Это не было проблемой с Кордовой вообще. Это потому, что я использовал Brave Broswer (Конфиденциальность браузера на основе Chrome) в качестве моего браузера разработчика. Похоже, что-то внутри Brave (молча ... вздыхает) препятствует доступу canvas.toDataURL () к данным с холста. Chrome и Firefox работают нормально.

...