アプリ版:「スタンプのみでお礼する」機能のリリースについて

同一階層に
a.html として
<html>
<body>
<script>
var text2="ハロー"
document.write(text2);
</script>
<br>
<script src="a.js"></script>
<script>
document.write(text);
</script>
a.js として
var text="こんにちは"
とすると
a.html には
ハロー
こんにちは
と表示されるのですが、a.htmlをiframeにBase64にエンコードして埋め込むと
<iframe src="data:text/html;base64,PGh0bWw+Cjxib2R5Pgo8c2NyaXB0Pgp2YXIgdGV4dDI9IoNug42BWyIKZG9jdW1lbnQud3JpdGUodGV4dDIpOwo8L3NjcmlwdD4KPGJyPgo8c2NyaXB0IHNyYz0iYS5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQ+CmRvY3VtZW50LndyaXRlKHRleHQpOwo8L3NjcmlwdD4KCgo="></iframe>
これではa.jsが読み込まれず実行結果は
ハロー のみになり<script src="a.js"></script>が実行されません。
document.write("<script src=\"./a.js\"></scr'+'ipt> ");
にしても、Base64変換したあとはa.jsが読み込まれません。
どうしてでしょうか?

A 回答 (1件)

こんにちは



ちゃんと確認してはいませんが・・・

>Base64変換したあとはa.jsが読み込まれません。
jsのURIはiframeのソースに対する相対アドレスとして記されていますが、そもそもbase64でHTML内に埋め込まれたソースのURIはどこなのでしょうか?
試しにiframeのbaseURIを調べてみると、base64の文字列がそのまま返されるようです。
推測ですが、「a.js」という相対アドレスが無効で読み込めていないのではないでしょうか?
絶対アドレスで指定したらどうなるでしょうか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。調べてみたところ、データURIスキームを用いるとChromeでは外部ファイルの読み取りができないように制限がかかっているということでした。絶対アドレスの場合はFirefoxでは読み込めたので正しく相対アドレスを書き直せばFirefoxでは動くと思います。

お礼日時:2020/03/11 10:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!