【问题标题】:Ionic dom-to-image plugin crash when rendering渲染时 Ionic dom-to-image 插件崩溃
【发布时间】:2019-05-13 16:45:17
【问题描述】:

我无法显示任何代码,因为问题不是给我错误、消息或任何东西。

我有这种情况: 我的应用必须使用 domToImage 进行 2 次渲染。

首先,我从相机/画廊 (base64) 获取图像 然后添加到 img.src 它呈现一个简单的背景。 我把这个bg放在一组Dom元素下,然后一起渲染 这个过程很好,没有问题,没有错误,没有错误。

直到突然它开始使应用程序崩溃。我没有进行任何更新,根本没有对我的代码进行任何更改。它工作正常,然后就不行了。

我重新制作了流程并将其缩小到仅在渲染时。仍然崩溃。

没有行动模式。它在 bg 渲染或设置渲染下崩溃,或者有时不会。但它不会连续错过2个。如果第一个例程没有失败,第二个会。任何地方。

我迷路了... 一个添加的 Xwalk,移除,从地面创建另一个相同的项目,仍然崩溃。 更改了插件导入,甚至重置了智能手机以进行某种干净的安装...... 不是我手机的问题,因为世界各地的许多客户都在报告这个错误。

有什么方向吗?

使用 Dom-to-Image 2.6.0

Ionic 3 - Android 平台

Som 代码:​​

home.ts

import domtoimage from "dom-to-image";

var node= document.getElementById("render");

    domtoimage.toPng(node, {
      height: node.offsetHeight * 2,
      width: node.offsetWidth * 2)
    })
    .then(dataUrl => {
      EventEmitterService.get("fullRendered").emit(dataUrl);
    })
    .catch(error => {
      alert(error)
    });

==================================

package.json

{
  "name": "Ionic App",
  "version": "0.0.1",
  "author": "Ionic Framework",
  "homepage": "http://ionicframework.com/",
  "private": true,
  "scripts": {
    "start": "ionic-app-scripts serve",
    "clean": "ionic-app-scripts clean",
    "build": "ionic-app-scripts build",
    "lint": "ionic-app-scripts lint"
  },
  "dependencies": {
    "@angular/animations": "5.2.11",
    "@angular/common": "5.2.11",
    "@angular/compiler": "5.2.11",
    "@angular/compiler-cli": "5.2.11",
    "@angular/core": "5.2.11",
    "@angular/forms": "5.2.11",
    "@angular/http": "5.2.11",
    "@angular/platform-browser": "5.2.11",
    "@angular/platform-browser-dynamic": "5.2.11",
    "@ionic-native/admob-free": "^4.18.0",
    "@ionic-native/android-full-screen": "^4.18.0",
    "@ionic-native/app-version": "^4.18.0",
    "@ionic-native/camera": "^4.18.0",
    "@ionic-native/core": "~4.17.0",
    "@ionic-native/file": "^4.18.0",
    "@ionic-native/photo-library": "^4.18.0",
    "@ionic-native/splash-screen": "~4.17.0",
    "@ionic-native/status-bar": "~4.17.0",
    "@ionic/storage": "^2.2.0",
    "angular2-uuid": "^1.1.1",
    "cordova-admob-sdk": "^0.21.0",
    "cordova-android": "^7.0.0",
    "cordova-plugin-admob-free": "0.24.0",
    "cordova-plugin-app-version": "0.1.9",
    "cordova-plugin-camera": "4.0.3",
    "cordova-plugin-device": "^2.0.2",
    "cordova-plugin-file": "6.0.1",
    "cordova-plugin-fullscreen": "1.2.0",
    "cordova-plugin-ionic-keyboard": "^2.1.3",
    "cordova-plugin-ionic-webview": "^2.3.1",
    "cordova-plugin-photo-library": "2.2.0",
    "cordova-plugin-splashscreen": "^5.0.2",
    "cordova-plugin-statusbar": "^2.4.2",
    "cordova-plugin-whitelist": "^1.3.3",
    "cordova-promise-polyfill": "0.0.2",
    "cordova-sqlite-storage": "2.5.2",
    "dom-to-image": "^2.6.0",
    "ionic-angular": "3.9.2",
    "ionicons": "3.0.0",
    "jquery": "^3.3.1",
    "rxjs": "5.5.11",
    "sw-toolbox": "3.6.0",
    "zone.js": "0.8.26"
  },
  "devDependencies": {
    "@ionic/app-scripts": "3.2.1",
    "@types/jquery": "^3.3.24",
    "typescript": "~2.6.2"
  },
  "description": "An Ionic project",
  "cordova": {
    "plugins": {
      "cordova-plugin-fullscreen": {},
      "cordova-plugin-file": {},
      "cordova-plugin-app-version": {},
      "cordova-plugin-camera": {},
      "cordova-plugin-photo-library": {
        "PHOTO_LIBRARY_USAGE_DESCRIPTION": "Save images on your phone"
      },
      "cordova-sqlite-storage": {},
      "cordova-plugin-admob-free": {
        "ADMOB_APP_ID": ""
      },
      "cordova-plugin-whitelist": {},
      "cordova-plugin-statusbar": {},
      "cordova-plugin-device": {},
      "cordova-plugin-splashscreen": {},
      "cordova-plugin-ionic-webview": {
        "ANDROID_SUPPORT_ANNOTATIONS_VERSION": "27.+"
      },
      "cordova-plugin-ionic-keyboard": {}
    },
    "platforms": [
      "android"
    ]
  }
}

【问题讨论】:

  • 试试这个 var domtoimage = require("dom-to-image-chrome-fix") 而不是 var domtoimage = require('dom-to-image')
  • 您需要发布足够的信息,以便有人重现该问题。什么是崩溃:浏览器、Electron 应用程序、Node、V8 还是其他?发布崩溃的代码。你还在用什么其他的包?发布你的package.jsonpackage-lock.json 文件,或者至少是依赖部分,如果它们不是太大,或者发布它们的链接(使用GitHub gists 发布它们)如果它们太大。
  • @OldPro 问题标题已经解释了它崩溃的地方,一个离子应用程序。我的部分问题是我无法重现该问题......没有关于它如何或何时使应用程序崩溃的模式。我的实现与官方文档中使用的完全相同。我将使用我的 package.json 进行编辑,尽管它没有任何帮助。我尝试在没有任何其他科尔多瓦本地人的情况下使用该插件,结果相同。
  • @i_th 感谢您发送的链接实际上是一个非常古老但仍然有效的实现。无论如何,这与我在代码中使用的内容没有什么不同,并且导入它就像我在问题的重新编辑中显示的那样。

标签: javascript ionic-framework ionic2 ionic3


【解决方案1】:

我建议你可以尝试用另一个 Js 包来实现这个目标。让我们试试html2canvas

安装

npm install --save html2canvas

导入

import html2canvas from 'html2canvas';

用法

var element = document.getElementById('div-to-render');
html2canvas(element, { allowTaint : true }).then((canvas) =>
{
  canvas.getContext('2d');
  var image = canvas.toDataURL('image/jpeg', 1.0);
});

现在您可以按照此处的说明显示或下载图像:https://stackoverflow.com/a/17407392

【讨论】:

  • Nicolas 感谢您的建议,但 html2canvas 对我不利。我起初尝试过,但它不能正确呈现我的所有 html 元素。它适用于一些事情,但我的太具体了。
猜你喜欢
  • 2018-05-01
  • 2022-10-08
  • 1970-01-01
  • 2018-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多