質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

2835閲覧

base64で書かれたリンクをJavaScriptで開けるようにするには

matchi6

総合スコア18

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

1グッド

2クリップ

投稿2019/03/31 12:31

HTMLのリンク先にスクレイピングで取得した画像のURLを入れています。
そのURLがbase64方式で書かれているためクリックしても、"400 bad request"のページが開かれ、検証画面のコンソールには"not allowed to navigate top frame to data url data:image/jpeg;base64〜"
というエラーが出てき、開くことができません。

base64で書かれたURLを開く方法、またはbase64で書かれたURLを開くことができるURLに変更できる方法を教えていただきたいです。

nappy👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Data URIのURLを開こうとした場合の動作は、ブラウザに依存するとのことです(Qiita)。

投稿2019/03/31 13:08

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

matchi6

2019/03/31 13:35

コメントありがとうございます。 Qiitaの記事を書かれた方と同じく、img要素をクリックしたら、img要素の画像を別タブウィンドウで表示したいのですが、 結論としましてはData URIで書かれているものはChromeでは開くことができないということでしょうか。
maisumakun

2019/03/31 13:37

そうですね、どうにか回避する方法があるかもしれません(どうすればいいか、パッとは思いつかないです)。
matchi6

2019/03/31 14:05

かしこまりました。 回答ありがとうございました。 数日経って、解決策が見つけれなければベストアンサーにさせていただきます。
guest

0

すでに解決済みとなっている質問ですが、解決案を思いついたため、またこれの他に解決案が特に挙げられていないため、回答します。

同じドメインに<canvas>要素を置いた別のページを用意し、そのページをwindow.openで開き、canvasにbase64を読み込ませるのが良さそうです。これであれば、ブラウザごとに違う挙動になることもなくなります。


別ページ(/canvas-page

html

1<!DOCTYPE html> 2<html lang="ja"> 3 <head> 4 <meta charset="utf-8"> 5 <meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=yes"> 6 <title>Canvas</title> 7 <style> 8 body { 9 background: #222; 10 display: flex; 11 justify-content: center; 12 vertical-align: middle; 13 } 14 </style> 15 </head> 16 <body> 17 <canvas id="image" width="1" height="1"></canvas> 18 </body> 19</html>

メインのページで読み込むJSのサンプル

js

1var getImageByBase64 = async base64 => { 2 var img = new Image(); 3 img.src = base64; 4 return await new Promise(r => (img.onload = e => r(img))); 5}; 6 7var CanvasPageOpener = async img => { 8 var win = window.open('/canvas-page'); 9 var doc = await new Promise(r => (win.onload = e => r(win.document))); 10 var canvas = doc.querySelector('#image'); 11 canvas.height = img.naturalHeight; 12 canvas.width = img.naturalWidth; 13 canvas.getContext('2d').drawImage(img, 0, 0); 14 return canvas; 15}; 16 17// main 18(async () => { 19 var base64 = 'data:image/png;base64,...'; 20 var image = await getImageByBase64(base64); 21 var canvas = await CanvasPageOpener(image); 22})();

投稿2021/07/28 14:05

編集2021/07/28 14:06
nappy

総合スコア28

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問