Add foreignObjectRendering option

This commit is contained in:
Niklas von Hertzen 2017-09-28 19:46:00 +08:00
parent 53dd885279
commit f16d581f04
4 changed files with 17 additions and 8 deletions

View File

@ -124,6 +124,7 @@ export class DocumentCloner {
proxy: this.options.proxy,
removeContainer: this.options.removeContainer,
scale: this.options.scale,
foreignObjectRendering: this.options.foreignObjectRendering,
target: new CanvasRenderer(),
width,
height,

View File

@ -46,8 +46,10 @@ export const renderElement = (
: documentBackgroundColor
: options.backgroundColor ? new Color(options.backgroundColor) : null;
// $FlowFixMe
return Feature.SUPPORT_FOREIGNOBJECT_DRAWING.then(
return (options.foreignObjectRendering
? // $FlowFixMe
Feature.SUPPORT_FOREIGNOBJECT_DRAWING
: Promise.resolve(false)).then(
supportForeignObject =>
supportForeignObject
? (cloner => {

View File

@ -13,6 +13,7 @@ export type Options = {
allowTaint: ?boolean,
backgroundColor: string,
canvas: ?HTMLCanvasElement,
foreignObjectRendering: boolean,
imageTimeout: number,
proxy: ?string,
removeContainer: ?boolean,
@ -56,6 +57,7 @@ const html2canvas = (element: HTMLElement, conf: ?Options): Promise<*> => {
imageTimeout: 15000,
proxy: null,
removeContainer: true,
foreignObjectRendering: true,
scale: defaultView.devicePixelRatio || 1,
target: new CanvasRenderer(config.canvas),
x: left,

View File

@ -115,12 +115,16 @@ const assertPath = (result, expected, desc) => {
});
it('Should render untainted canvas', () => {
return testContainer.contentWindow
.html2canvas(testContainer.contentWindow.forceElement || testContainer.contentWindow.document.documentElement, {
removeContainer: true,
backgroundColor: '#ffffff',
proxy: 'http://localhost:8081/proxy',
...(testContainer.contentWindow.h2cOptions || {})
})
.html2canvas(
testContainer.contentWindow.forceElement ||
testContainer.contentWindow.document.documentElement,
{
removeContainer: true,
backgroundColor: '#ffffff',
proxy: 'http://localhost:8081/proxy',
...(testContainer.contentWindow.h2cOptions || {})
}
)
.then(canvas => {
try {
canvas