Videoタグの動画のスナップショットを保存するブックマークレットです。
以下になります。
javascript: (function(){ var video = document.getElementsByTagName('video'); if (video) { var canvas = document.createElement('canvas'); canvas.width = video.videoWidth; canvas.height = video.videoHeight; var context = canvas.getContext('2d'); context.drawImage(video, 0, 0, canvas.width, canvas.height);var url = canvas.toDataURL(); var image = new Image(); image.src = url; var a = document.createElement('a'); a.download = ${location.host}_${new Date().toISOString()}.png
; a.target = '_blank'; a.href = image.src; a.click(); } else { alert('There is no video tag.'); } })()
コンソールから実行してみたところ、次のようなエラーが表示されました。
Uncaught TypeError: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The provided value is not of type '(CSSImageValue or HTMLImageElement or SVGImageElement or HTMLVideoElement or HTMLCanvasElement or ImageBitmap or OffscreenCanvas)'
at <anonymous>:1:253
at <anonymous>:1:577
どのように修正すれば良いでしょうか?
追記
Lhankor_Mhyさん、ご回答ありがとうございます。
セキュリティの警告が出るため、クロスドメインだと思います。
また、「Execution Context Selector」の特定のメニューを選択するコマンドがあればいいのですが、それがないため、コンソール画面内の同メニュー「top」とある部分、毎回選択し直さないといけません。
こちらで該当フレームを選択してから実行すると成功することが分かりましたので、動画部分を右クリックしてどうの・・・というのは必要ないことが分かりました。
また、ChromeのDataURIに2MBの制限があることが分かったため、スナップショットのサイズがこれを超過した場合、失敗します。
そのため、Blobオブジェクトへの変換が必要になりますが、これに関する記事は既にありました。
暫定的な解決策
コンソール画面を開く
Execution Context Selectorの該当メニューを選択
コンソール画面にコードを貼り付けて実行(※Blob必須の場合あり)
Execution Context Selectorに関するコマンドがあれば完全自動化可能?
ブックマークレットの時のみ失敗するというのもこれが原因。
ブックマークレット実行時の場所は、同メニューで言うところの「top」に該当しており、
つまりは「top」で得られる情報以外の情報は取得できない仕組み?
回答2件
あなたの回答
tips
プレビュー