Html2canvas: IE 11 问题,错误:未捕获(承诺):错误:未找到成员。

创建于 2018-01-08  ·  36评论  ·  资料来源: niklasvh/html2canvas

得到错误:“html2canvas $npm_package_version。错误:未捕获(承诺):错误:未找到成员。”
当我尝试获取画布时。

代码:
html2canvas(document.querySelector("#capture")).then(function (canvas) {
控制台日志(画布);
document.getElementById('here-appear-theimages').appendChild(canvas);
});
使用:
角度版本:4.0.1
操作系统:窗口 10
还添加了参考: https :
附上错误截图。

error_ie_11

Needs More Information

最有用的评论

修复!!
打开node_modules/html2canvas/dist/html2canvas.js
搜索if (rule && rule.cssText)
并将其更改为if (rule && typeof rule.cssText === 'string')
这在 IE11 中为我解决了问题:)

所有36条评论

我添加了以下承诺库的链接,它似乎为我们修复了 IE 11。
https://cdnjs.cloudflare.com/ajax/libs/bluebird/3.3.4/bluebird.min.js

如果没有代码来重现错误,我真的无能为力。

@niklasvh

这是我在 GitHub 上托管的演示示例,您可以看到 - GitHub Html2Canvas Demo

完整代码也上传到了github,如果想看:代码包

如何运行项目:
1) 解压包
2)从目录运行命令:“npm install”以安装依赖项
3)运行项目命令:“npm start”

@jelkins8

我已经尝试过这个解决方案,但它对我不起作用。
这是我在 GitHub 上托管的演示示例,您可以看到 - GitHub Html2Canvas Demo

谢谢

@niklasvh
我也尝试过 es6-promise 和 bluebird 在 IE11 中没有成功,可以确认GitHub Html2Canvas Demo在 IE 中也失败了。
我收到html2canvas: Error: Member not found.后跟Possible Unhandled Promise Rejection: Error: Member not found.
谢谢!

更新,使用 bluebird polyfill 后,我的堆栈跟踪是:

Error: Member not found.
at Anonymous function (eval code:213:21)
   at createElementClone (eval code:212:17)
at cloneNode (eval code:225:13)
at cloneNode (eval code:248:25)
at cloneNode (eval code:248:25)
 at DocumentCloner (eval code:53:9)
at cloneWindow (eval code:505:5)
at Anonymous function (eval code:53:9)
at r (https://cdnjs.cloudflare.com/ajax/libs/bluebird/3.3.4/bluebird.min.js:31:6804)
at r.prototype._settlePromiseFromHandler (https://cdnjs.cloudflare.com/ajax/libs/bluebird/3.3.4/bluebird.min.js:30:12222)

我面临同样的 html2canvas 问题:IE 找不到成员。
对于 chrome,它工作得很好。
如果有任何解决方案,请更新。 谢谢

我已经重现了这个问题并找到了原因,当它尝试访问cssText属性时,它发生在createElementClone函数中,出于某种原因,当使用 font-awesome(一个带有fa-spin的元素时)

如下工作:

if (node instanceof HTMLStyleElement && node.sheet && node.sheet.cssRules) {
              var style = node.cloneNode(false);
                  var css = [].slice.call(node.sheet.cssRules, 0).reduce(function (css, rule) {
                    try {
                      if (rule && rule.cssText) {
                        return css + rule.cssText;
                      }
                      return css;
                    } catch (err) {
                      _this3.logger.log('Unable to access cssText property', rule.name);
                    }
                  }, '');
                  style.textContent = css;

                return style;
            }

注意 try...catch。

我会提出一个 PR。

似乎会导致Firefox 58.0.0 (Linux 0.0.0) /tests/reftests/background/radial-gradient2.html Should render untainted canvas FAILED @niklasvh的回归,你有机会看看吗?

谢谢

@niklasvh
您对此有任何解决方案吗,有人在关注这个问题吗?

谢谢

@Prabhat2404 ,我在https://github.com/niklasvh/html2canvas/pull/1415 中提出的修复对我来说非常有用,但是它确实未能通过我要求@niklasvh进行的径向梯度测试之一看一下。 当我使用字体很棒的图标时,特别是 fa-spin 会出现这个问题。

同样的问题在这里

如果我们尝试打印 html 代码,IE 仍然存在此问题。
是否有任何解决方法可以不修改库源代码并解决问题?

+1

+1

+1

它对

@evgenyjam该解决方案仍然存在错误,您需要添加一个空字符串作为reduce的初始值。

我在 PR 上提到过,但作者尚未更新。 但有了这种改变,它对我有用。

@cyouden这样?
.reduce(("", css, 规则) => {

@BrunoMarc不,这是减少的最后一个论点,所以:
.reduce((css, rule) => { /* 代码 */ }, "")

(例如,请参阅建议在该差异中替换的更改代码,它正确地使用了初始值来减少。)

@cyouden感谢您的回复! 我已经在 html2canvas.js 中插入了这段代码,但是没有找到的成员仍然存在,有什么想法吗?
如果(HTMLStyleElement 的节点实例 && node.sheet && node.sheet.cssRules){
const css = [].slice
.call(node.sheet.cssRules, 0)
.reduce((css, rule) => {
尝试 {
如果(规则&& rule.cssText){
返回 css + rule.cssText;
}
返回CSS;
} 抓住(错误){
this.logger.log('无法访问 cssText 属性', rule.name);
返回CSS;
}
}, '');
const style = node.cloneNode(false);
style.textContent = css;
返回样式;
}

@BrunoMarc不知道,这种变化足以让它为我工作。

嘿 - 很抱歉迟到了,我刚刚按照建议对 reduce 的默认空字符串进行了更改,希望有所帮助!
干杯

@niklasvh @BrunoMarc @cyouden好消息该构建正在通过公关
抱歉,我没有早点更新,实际上我已经不再移动库了,我在高峰期使用它时遇到了这个错误。 希望能帮助到你!

@simonpinn我正在尝试将 html2canvas-1.0.0-alpha.10 版本用于我的 angular 4 代码。 我在所有浏览器中都出现以下错误。 并且只有一部分 html 被打印出来。

34487 毫秒 html2canvas:html2canvas $npm_package_version
core.js:1427 错误错误:未捕获(承诺):未定义
在 resolvePromise (zone.js:824)
在 resolvePromise (zone.js:795)
在 eval (zone.js:873)
在 ZoneDelegate.invokeTask (zone.js:425)
在 Object.onInvokeTask (core.js:4747)
在 ZoneDelegate.invokeTask (zone.js:424)
在 Zone.runTask (zone.js:192)
在drainMicroTaskQueue (zone.js:602)
在 ZoneTask.invokeTask [as invoke] (zone.js:503)
在 invokeTask (zone.js:1540)
defaultErrorLogger @ core.js:1427
ErrorHandler.handleError @ core.js:1488
Logger.js:36 83270ms html2canvas: 完成解析节点树
给定的长度值无效:“自动”

@simonpinn我使用的方式如下。 tyscript(angular 4)代码中的最新版本 1.0.0-alpha.10 是否有任何问题? 你能帮我解决问题吗? 我非常需要。

image

@bandacs这个问题是为了解决未捕获承诺的 IE 11 错误,如果您遇到问题,请针对 alpha.10 版本提出问题。

谢谢

@simonpinn @cyouden
跟进上述缺陷。 我为 Chrome 和 Firefox 浏览器找到了另一个库(dom-to-image)。 但是这个问题在 IE 中仍然存在。 当我进行上述对话时,我了解到空字符串解决方法修复了该缺陷。 那是工作吗? 我也可以知道该更改何时会包含在库中?

修复合并到 v1.0.0-alpha.11

我有 reactjs 项目,我为 html2canvas 更新做了 npm install。 但在 IE 11 浏览器中,它仍然向我显示未找到会员错误。 请帮忙。 我在 Windows 8 系统上检查过

我正在使用 v1.0.0-alpha.11,它在 Chrome 中运行良好,但在 IE 11 上的同一行出现错误
html2canvas(panel).then(canvas => {
var img = canvas.toDataURL("image/png");
});

你好。 对我来说同样的错误。 我们的客户使用 IE11 作为默认...

修复!!
打开node_modules/html2canvas/dist/html2canvas.js
搜索if (rule && rule.cssText)
并将其更改为if (rule && typeof rule.cssText === 'string')
这在 IE11 中为我解决了问题:)

大家好,
我也有以下问题已解决:
打开 node_modules/html2canvas/dist/html2canvas.js
搜索 if (rule && rule.cssText)
并将其更改为 if (rule && typeof rule.cssText === 'string')
这在 IE11 中为我解决了问题:)

如何获得它的新发布版本以在我的项目中使用? 目前我通过在本地环境中的节点模块中进行编辑来进行测试。 推动它生产需要一个新的发布版本的'html2canvas'版本吗? 你能帮我拿吗?

目前我正在使用“html2canvas”:“^1.0.0-rc.1”,它没有修复。

@niklasvh ,你能告诉我什么时候发布新版本并修复问题 #1374。 急切地等待在版本中看到修复。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

bishwapoudel picture bishwapoudel  ·  4评论

Josh10101010 picture Josh10101010  ·  3评论

tibewww picture tibewww  ·  4评论

rrutkows picture rrutkows  ·  4评论

ABHIKSINGHH picture ABHIKSINGHH  ·  3评论