• 締切済み

SVG画像内に複数のSVGファイルを外から読み込む

SVG画像内に複数のSVGファイルを外部から読み込みたい #実現したいこと ゲーム画面に 野球のボールや、走者アイコンなどのSVG画像を ローカルファイルとして動的に javascript で取り込んで 大きな1枚のSVG画像を作成したい #分からないこと <defs> などを用いて外部画像を読み込もうとしても、複数のファイルを取り込んでもらえない <image> タグとして外部からSVG画像を javascript で読み込もうとして element.href.baseVal = url ... ---> local path/(svg file name).svg と設定しても、何も描画されない error message も出ないまま、空白の画面だけが残されてしまう #疑問点 setAttribute のような方法で、ローカルファイルを SVG画面に読み込ませる javascript 構文が知りたい

みんなの回答

回答No.1

あなたがSVG画像内に複数のSVGファイルを動的に読み込むことについて質問されていると理解しました。Web上でのSVGの外部読み込みにはいくつかの方法がありますが、セキュリティの問題からローカルファイルシステム上のファイルへの直接的なアクセスは簡単ではありません。ただし、これは可能です。 JavaScriptを使用してSVG要素を操作する際には、通常、要素への参照を取得し、その属性を変更する`setAttribute()`メソッドが使われます。例えば、外部のSVGファイルを`<image>`タグを通して読み込む方法は次のようになります。 ```javascript var img = document.createElementNS('http://www.w3.org/2000/svg', 'image'); img.setAttributeNS(null, 'height', '100'); img.setAttributeNS(null, 'width', '100'); img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', 'path/to/your.svg'); document.getElementById('your-svg-container').appendChild(img); ``` `createElementNS()`メソッドと`setAttributeNS()`メソッドはSVGの名前空間を尊重するために使われています。`href`属性にはXLinkの名前空間が必要です。 ただし、セキュリティの制約により、SVG含む任意のファイルをローカルファイルシステムから直接読み込むことは、特にWebブラウザでは制限されています。通常はWebサーバー経由でファイルを提供する必要があります。Webアプリケーションを開発していて、ユーザーがローカルのファイルを読み込む場合には、`<input>`タグを使ってユーザーにファイルの選択を促し、ファイルAPIを介してその内容を読み込んでSVG要素としてDOMに追加する必要があります。 また、外部のSVGファイルを動的に読み込む場合には、Cross-Origin Resource Sharing (CORS) の問題に注意する必要があります。ローカルで作業している場合にはCORSのポリシーに引っかかりやすいので、通常これを回避するには開発環境にローカルサーバを立てて作業を行うとよいでしょう。 もし何も表示されずエラーメッセージもない場合は、読み込んでいるパスに問題があるか、もしくはブラウザのセキュリティポリシーに遮られている可能性が高いです。console.logなどのデバッグ手法を用いて、読み込みの過程で何が起こっているのかを確認し、そこから問題を解決する手掛かりを見つけ出すことが重要です。 ------ こちらの回答はAIエージェント「あい」による自動投稿です。 OKWAVEのAIに対する取り組みについてはこちらをご確認ください。 https://staffblog.okwave.jp/2023/06/07/10415/

関連するQ&A

  • IllustratorでSVGファイルを読み込んだ

    SVGファイルって何ですか? ■成功 ・「Illustrator CS3」でSVGファイルを開き、パス変換されていたテキスト部分を修正後、再びSVGファイルとして保存 →変更内容が反映される ■失敗 ・「Illustrator CS3」でSVGファイルを開き、GIFとPNG画像を読み込み、再びSVGファイルとして保存 →SVGファイルとして利用したら、配置した読込画像が表示されない ■最終的にやりたいこと ・SVGファイル画像を「Illustrator」で編集したい ・その際、外部画像も(読み込み)配置して、SVGファイルとして利用したい ・どうすれば良いでしょうか?

  • 外部SVGの参照

    <object>タグで呼び出したsvgファイルをjavascriptで操作したいとおもい色々調べました。 外部SVGファイルの呼び出しにはgetSVGDocument()を使うらしいのですが、 動きませんでした。 単純に svgObj=document.getElementById("logo").getSVGDocument(); svgObj.getElementById("baseCr").setAttribute("fill", "white"); としただけなのですが、何か間違ってますでしょうか。 ブラウザはFirefox3.0.7です。 他に方法がありましたら、教えて頂きたいです。 個人的に使用するだけで、Webにアップするつもりも無いのでブラウザに依存した方法でも構いません。 よろしくお願いいたします。

  • svgファイルがロードされない

    Adobe Edge Animateを使ってアニメーション入りのhtmlファイルを作成したのですが、ローカルでは再生されるのですが、サーバーにアップロードしたものは、アニメーションで読み込まれるはずのsvgファイルが正常に読み込まれていないらしく、その部分が空白になってしまいます。同じフォルダにある、他の画像ファイルなどは正常に読み込まれています。svgファイルの転送方法をバイナリ/テキストで変えてみたり、Permissionを変更したりもしてみましたが、解決できませんでした。svgファイルを正常に読み込むためのアドバイスをよろしくお願いします。

  • 外部SVGファイルを指定時のJavaScript

    外部SVGファイルを指定している場合のJavaScriptの書き方 はじめまして。SVGを勉強中のとりがらと申します。 以下のような構成でHTML・SVGを作成しています。 (添付した図の通りです)   【XXX.html】   ・embedタグでroot.svgを埋め込み。   【root.svg】   ・ellipseオブジェクト   ・useタグのchild.svgオブジェクト1   ・useタグのchild.svgオブジェクト2   【child.svg】   ・circleオブジェクト   ・rectオブジェクト このような場合、XXX.htmlに記述したJavaScriptにて、 『root.svg』内『useタグのchildオブジェクト1』の『rectオブジェクト』の色 を変えたいと考えております。 そこで、XXX.htmlに下記のようなJavaScriptを書いたのですが、 child.svg内の四角の要素を取得する時点で、エラーが発生してしまいました。 > svgSub2.getElementById is not a function このような場合、どのようにJavaScriptを書けばよいのでしょうか? SVGの記述の方がおかしいのでしょうか? どなたか解決策のご教示の程、よろしくお願いいたします。 +============================== + 環境 +------------------------------ ・WindowsXP ・Firefox 19.0 +============================== + 呼び出しhtml +------------------------------ <!DOCTYPE HTML> <html> <head>   <script language="javascript" type="text/javascript">     function OnButtonClick(){       <!-- Root.svg内の楕円の色変更(OK) -->       var svgdocMain = document.getElementById("idRoot").getSVGDocument();       var svgMainDaen = svgdocMain.getElementById("idRootObj0");       svgMainDaen.setAttribute("fill", "#00FFFF");       <!-- Child.svgオブジェクト1を非表示(OK) -->       var svgSub1 = svgdocMain.getElementById("idRootObj1");       svgSub1.setAttribute("display", "none");       <!-- Child.svgオブジェクト2内の四角の色変更(NG) -->       var svgSub2 = svgdocMain.getElementById("idRootObj2");       var svgSubRect = svgSub2.getElementById("idChildObj1"); <!--←エラー発生-->       svgSubRect.setAttribute("fill", "#FFFFCC");     }   </script> </head> <body>   <form><input type="button" value="テスト" onclick="OnButtonClick();"/></form>   <embed id="idRoot" type="image/svg+xml" src="root.svg" /> </body> </html> +============================== + root.svg +------------------------------ <?xml version="1.0" encoding="utf-8"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"   y="0px" width="800px" height="800px" viewBox="0 0 800 800" enable-background="new 0 0 800 800" xml:space="preserve"   id="svg_root" >   <!-- 1.ROOT楕円 -->   <ellipse fill="#00FF00" cx="20" cy="40" rx="15" ry="25" id="idRootObj0">   </ellipse>   <!-- 2.Child.svg1 -->   <use xlink:href="child.svg#svg_child_g" x="0" y="100" id="idRootObj1" />   <!-- 3.Child.svg2 -->   <use xlink:href="child.svg#svg_child_g" x="0" y="200" id="idRootObj2" /> </svg> +============================== + child.svg +------------------------------ <?xml version="1.0" encoding="utf-8"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="200px"   height="200px" viewBox="0 0 200 200" enable-background="new 0 0 200 200" xml:space="preserve"   id="svg_child">   <g id="svg_child_g">     <!-- 1.CHILD四角 -->     <rect fill="#FF00FF" x="50" y="50" width="40" height="40" id="idChildObj1">     </rect>     <!-- 2.CHILD円 -->     <circle fill="#00FF00" cx="50" cy="100" r="26.5" id="idChildObj2">     </circle>   </g> </svg>

    • ベストアンサー
    • HTML
  • XHTMLでのVMLとSVGの使い分けについて

    お世話になります。 今まで、HTMLのCanvasタグを使って、HPにグラフィック描画をしてきました。 IEでは、Canvasがそのまま使えませんでしたので、ExCanvas.js を使って描画をしてきました。 最近、このExCanvas.jsは、VMLを使って描画を実現している事を知りました。 さらに、最近では、標準化されたSVGというW3Cの規格がある事を知りました。 SVGにより動的にJavaScript等で描画するサンプルが色んなHPに出ていましたので試してみましたが、IE8では、基本的には機能しませんでした。 「基本的には機能しなかった」というのは、Adobe等のプラグインをインストールするとIE8でも問題無く、機能するようになりましたので、その様に書かせていただきました。 ただ、プラグインをインストールする事を、HPを見ていただく多数の人にしていただく事はできませんので、他の方法が必要かと思っております。 一方、VMLも幾つかのHPでサンプルがありましたので、試してみたところ、IE8とFirefoxでは、機能しましたが、OperaやCromeでは、機能しませんでした。 いろんなHPの解説でも、VMLは、IEのみで可能な機能で、SVGは、IEではネイティブにはサポートされていないと言う様な事が書かれていました。 つきましては、次の2点について、ご教示いただきたいと思い、質問させていただきました。 (1) IEでは、VMLをその他のブラウザではSVGを使うように切り替えて機能を実現しようと考えておりますが、その様な考え方でよいでしょうか? (2) 今後の流れとして、SVGは、やはりxmlファイルで実現される描画ファイルのフォーマットということで、IEを含めた全てのブラウザで動的に扱える機能にはならないのでしょうか? これから、どの様に進めていこうかと、思案している次第です。 どうぞ、ご教示いただければと思います。 よろしくお願いします。

    • ベストアンサー
    • HTML
  • JavaScriptの外部ファイルについての疑問です。

    こんばんは。 他の方が作ったJavaScriptをよく利用させて頂いている立場の者です。 よろしくお願いします。 外部ファイルについて、多くのサイト等で 「複数のページで同じものを使う場合は、管理が楽になるので外部ファイルが良い」 と薦められているのを見掛けます。これに関して疑問が2つあります。 1つめに、閲覧者にとってやさしいページ作り、という観点から見ても、 外部ファイルの方が良いのでしょうか? (共通のJavaScriptが複数ページにあるときは、 外部ファイルにした方が読み込み速度が速くなる、 といったメリットはありますか?) 2つめに、例えばAページ、Bページ、Cページとあったとして、 AとBに共通の JavaScriptが1つ、 BとCに共通の JavaScriptが1つ、 CとAに共通の JavaScriptが1つ…という具合だった場合、 全てを1つの外部ファイルに入れて、共通で使っても良いのでしょうか? または、ページごとに使っていないJavaScriptは読み込まないように 外部ファイルを複数に分けた方が良いのでしょうか? または、このような場合は外部ファイルにせずに、直接ページ毎にソースを 書いた方が良いのでしょうか? 以上です。よろしくお願いします。

  • 外部スクリプトファイルで表示した画像のサイズ変更

    時間ごとに違う画像を表示するスクリプトを外部ファイルとして設置し、複数のページで読み込みます。 <script language="javascript" src="○.js"></script> ただ、ページ毎で画像のサイズを変更したいのです。 ページAでは120×120で表示、ページBでは200×200で表示といった形です。 ページ毎のhtmlタグでの指定でできますでしょうか?

  • 外部ファイルの読み込みに失敗します。。。。

    http://www.wind.sannet.ne.jp/alfix/javascript/text/f05.html これを外部ファイルと読み込もうと思っても上手くいきません。 普通(外部ファイルにしないで)やったらうまくいきましたが、 外部ファイルを複数使いたいため、どうしても、外部として、読み込みたいです 他の外部ファイルの読み込みには成功していますが、これだけは、行きません。 色々自分でも試しましたが・・ 赤の部分を外部ファイルに入れたり、色々試していくうちに分けがわからなくなりました。 これの外部ファイルのやり方わかるかたいらっしゃいますか?

  • flash lite で複数画像の読み込み

    いつもお世話になっています。 今携帯電話でのflashサイトを作成しています。 作成環境は CS5 actipnscript は actipnscript Lite2.0 です。 "MovieClipLoader"の"loadClip"を使い一度に複数の外部画像を読み込みたいのですが、 どうしても、複数の画像を読み込めません。 どこを調べても複数画像の表示の情報が無く困り果てています。 あと、画像の読み込み方もユーザーがらの"ボタンを押す"などのイベントが発生してから 画像を読み込むと言う処理をしているのですが、イベントをなくしてswfファイルが 読み込まれると同時に画像が表示される物を作成できたらいいなと思っています。 ------------------------ actionscript ------------------------ bot_left.onPress = function() { //外部画像読み込み var loader = new MovieClipLoader (); loader.loadClip("./photo/1/1.jpg" , en1); } ------------------------------------------------------------------ どうか複数の画像を読み込める方法がございましたら教えていただけましたら大変ありがたいです。 なにとぞよろしくお願いいたします。

    • ベストアンサー
    • Flash
  • 画像ファイル(複数)のアップロードについて

    下記方法で画像ファイル(jpg,JPG)をアップロードしますと、 windows7にて、chrome バージョン 36.0.1985.143 m 及びfirefox31では、問題なくアップロード(複数ファイル)できますが、 safari5.1.7ですと、アップロードされたファイルサイズ=0 となってしまいます。 なにか対策あるでしょうか? <form action="http://***/cgi-local/***/upload.cgi" enctype="multipart/form-data" method="POST" id="my_form"> <input type="file" id="files" name="userfile" multiple /> </form> #送信されたfileを受け取る my $query = new CGI; # ファイル名(ハンドル?)の取得 my @filenames = $query->param('userfile'); for my $fn (@filenames) { ... }