vegaprotocol / pennant

A charting library for Vega Console
https://pennant.vega.xyz
MIT License
28 stars 8 forks source link

Chart Controls: Screenshot button does not work in Firefox #107

Open edd opened 3 years ago

edd commented 3 years ago

Peek 2021-04-13 15-32

Presumably Firefox doesn't support OffscreenCanvas? I have not been to check

Quick fix

Better fix

Uncaught (in promise) ReferenceError: OffscreenCanvas is not defined
    _callee$ https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1
    tryCatch https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    invoke https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    defineIteratorMethods https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    asyncGeneratorStep https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1
    _next https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1
    _asyncToGenerator https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1
    _asyncToGenerator https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1
    asyncSnapshot https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1
    _snapshot https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1
    snapshot https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1
    snapshot https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1
    _callee$ https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1
    tryCatch https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    invoke https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    defineIteratorMethods https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    app_stories_asyncGeneratorStep https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1
    _next https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1
    app_stories_asyncToGenerator https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1
    app_stories_asyncToGenerator https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1
    Rb https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    Xb https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    Yb https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    Ze https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    se https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    jd https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    Jb https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    Nb https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    jd https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    yc https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    hd https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    unstable_runWithPriority https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    gg https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    Hb https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    gd https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
main.2756f38a.iframe.bundle.js:1:81616
    app_stories_asyncGeneratorStep https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1
    _throw https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1
    (Async: promise callback)
    app_stories_asyncGeneratorStep https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1
    _next https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1
    app_stories_asyncToGenerator https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1
    app_stories_asyncToGenerator https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1
    Rb https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    Xb https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    Yb https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    Ze https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    se https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    jd https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    Jb https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    Nb https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    jd https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    yc https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    hd https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    bind_applyFunctionN self-hosted:1371
    hd self-hosted:1334
    unstable_runWithPriority https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    gg https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    Hb https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    gd https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    bind_applyFunctionN self-hosted:1371
    gd self-hosted:1334
edd commented 3 years ago

As per https://developer.mozilla.org/en-US/docs/Web/API/OffscreenCanvas#browser_compatibility, this is disabled by default in Firefox. Enabling it (gfx.offscreencanvas.enabled in about:config) gets us a new error. Unhelpful stacktrace included:

Uncaught (in promise) 
Exception
​
columnNumber: 0
​
data: null
​
filename: "https://pennant.netlify.app/main.2756f38a.iframe.bundle.js"
​
lineNumber: 1
​
message: ""
​
name: "NS_ERROR_NOT_IMPLEMENTED"
​
result: 2147500033
​
stack: "_callee$@https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1:81733\ntryCatch@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:1275032\ninvoke@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:1274663\ndefineIteratorMethods/</<@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:1275798\nasyncGeneratorStep@https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1:80133\n_next@https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1:80453\n_asyncToGenerator/</<@https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1:80590\n_asyncToGenerator/<@https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1:80347\n_asyncSnapshot@https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1:82976\nasyncSnapshot@https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1:80652\n250/PlotContainer</_snapshot<@https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1:155204\nsnapshot@https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1:151023\nsnapshot@https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1:129731\n_callee$@https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1:52585\ntryCatch@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:1275032\ninvoke@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:1274663\ndefineIteratorMethods/</<@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:1275798\napp_stories_asyncGeneratorStep@https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1:47570\n_next@https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1:47913\napp_stories_asyncToGenerator/</<@https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1:48062\napp_stories_asyncToGenerator/<@https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1:47795\nRb@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:2989898\nXb@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:2990052\nYb@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:3008052\nZe@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:3008146\nse@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:3008562\njd/<@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:3014226\nJb@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:3089633\nNb@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:3010029\njd@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:3010059\nyc@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:2998307\nhd@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:2997530\nexports.unstable_runWithPriority@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:3095904\ngg@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:3018376\nHb@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:3089375\ngd@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:2997323\nEventListener.handleEvent*af@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:3009479\ndf@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:3009122\ncf/<@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:3008814\ncf@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:3008782\nqk@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:3082888\nsk@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:3083658\ntk@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:3083692\nexports.render@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:3091256\nrender/<@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:923847\nrender@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:923796\n_callee$@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:926263\ntryCatch@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:1275032\ninvoke@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:1274663\ndefineIteratorMethods/</<@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:1275798\nasyncGeneratorStep@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:921556\n_next@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:921876\n_asyncToGenerator/</<@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:922013\n_asyncToGenerator/<@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:921770\n_renderMain@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:926350\nrenderMain@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:926463\n_callee3$@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:2464269\ntryCatch@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:1275032\ninvoke@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:1274663\ndefineIteratorMethods/</<@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:1275798\nStoryRenderer_asyncGeneratorStep@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:2454341\n_next@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:2454688\npromise callback*StoryRenderer_asyncGeneratorStep@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:2454451\n_next@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:2454688\nStoryRenderer_asyncToGenerator/</<@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:2454839\nStoryRenderer_asyncToGenerator/<@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:2454568\nrenderStory@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:2464749\n_callee2$@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:2460727\ntryCatch@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:1275032\ninvoke@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:1274663\ndefineIteratorMethods/</<@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:1275798\nStoryRenderer_asyncGeneratorStep@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:2454341\n_next@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:2454688\nStoryRenderer_asyncToGenerator/</<@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:2454839\nStoryRenderer_asyncToGenerator/<@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:2454568\nrenderStoryIfChanged@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:2461115\n_callee$@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:2458261\ntryCatch@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:1275032\ninvoke@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:1274663\ndefineIteratorMethods/</<@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:1275798\nStoryRenderer_asyncGeneratorStep@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:2454341\n_next@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:2454688\nStoryRenderer_asyncToGenerator/</<@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:2454839\nStoryRenderer_asyncToGenerator/<@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:2454568\nrenderCurrentStory@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:2458440\nsetupListeners/<@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:2456446\nhandleEvent/<@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:1337025\nhandleEvent@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:1337000\nhandler@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:1335707\nemit@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:1335762\nsetSelection@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:2428403\nsetupListeners/<@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:2409950\nhandleEvent/<@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:1337025\nhandleEvent@https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2:1337000\n"
​
<prototype>: ExceptionPrototype { toString: toString(), name: Getter, message: Getter, … }
main.2756f38a.iframe.bundle.js:1
    app_stories_asyncGeneratorStep https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1
    _throw https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1
    (Async: promise callback)
    app_stories_asyncGeneratorStep https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1
    _next https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1
    app_stories_asyncToGenerator https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1
    app_stories_asyncToGenerator https://pennant.netlify.app/main.2756f38a.iframe.bundle.js:1
    Rb https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    Xb https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    Yb https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    Ze https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    se https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    jd https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    Jb https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    Nb https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    jd https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    yc https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    hd https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    bind_applyFunctionN self-hosted:1371
    hd self-hosted:1334
    unstable_runWithPriority https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    gg https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    Hb https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    gd https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    bind_applyFunctionN self-hosted:1371
    gd self-hosted:1334
    (Async: EventListener.handleEvent)
    af https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    df https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    cf https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    forEach self-hosted:4324
    cf https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    qk https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    sk https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    tk https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    render https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    render https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    render https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    _callee$ https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    tryCatch https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    invoke https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    defineIteratorMethods https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    asyncGeneratorStep https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    _next https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    _asyncToGenerator https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    _asyncToGenerator https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    _renderMain https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    renderMain https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    _callee3$ https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    tryCatch https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    invoke https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    defineIteratorMethods https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    StoryRenderer_asyncGeneratorStep https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    _next https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    (Async: promise callback)
    StoryRenderer_asyncGeneratorStep https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    _next https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
    StoryRenderer_asyncToGenerator https://pennant.netlify.app/vendors~main.4317decb.iframe.bundle.js:2
johnwalley commented 3 years ago

Addressed by #175