2011-06-30 5 views
1

問題は、jqueryを使用してsvg要素内にiframeを埋め込もうとしているため、iframeを取得できません。ここで私が望むものと非常に似てスタックオーバーフローからの例では、それは単にHTMLスニペットを表示したいと思い除き、次のとおりです。SVG要素内に埋め込まれたiframe

Possible to embed a youtube video in an svg?

私のjqueryのコードは、このようなものです

function showTextToolbar(selectedGroup){ 
     console.log("here"); 
     var x = +$($(selectedGroup).children().get(0)).attr("x"); 
     var y = +$($(selectedGroup).children().get(0)).attr("y") - 30; 
     console.log(x); 
     console.log(y); 
     var newFOSvg = svgEditor.canvas.addSvgElementFromJson({ 
       "element": "foreignobject", 
       "id": "textTool", 
       "attr":{ 
        "x":x, 
        "y":y, 
        "width":"360", 
        "height":"30" 
        } 
       }); 
     var newIframeSvg = svgEditor.canvas.addSvgElementFromJson({ 
      "element": "iframe", 
      "attr":{ 
       "width":"360", 
       "height":"30", 
       "src":"http://www.google.com", 
       "xmlns":"http://www.w3.org/1999/xhtml" 
       } 
      }); 
     newFOSvg.appendChild(newIframeSvg); 
     canv.getElem("svgcontent").appendChild(newFOSvg); 
    } 

基本的に、このコードでは、既にキャンバスに存在するsvgルートに要素を追加するために、いくつかの既成関数(addSvgElementFromJson)を使用しています。フレームが表示されるかどうかを確認するためにダミーリンクを使用しています。実行時に関数を呼び出すと、エラーはなく、svgセクションは正しく更新されますが、何も表示されません。ここで

はインラインフレームやその他のオブジェクトのカップルで更新SVGです:

<svg width="600" height="800" xmlns="http://www.w3.org/2000/svg"> 
    <g> 
     <title>Layer 1</title> 
     <g id="0ea5f198be28b719853b18c7390003e7"> 
     <rect id="svg_1" width="350" height="50" fill="#ffffff" stroke="#22C" stroke-width="0.5" x="20" y="40"/> 
     </g> 
    </g> 
    <foreignobject height="30" width="360" y="10" x="20"> 
     <iframe xmlns="http://www.w3.org/1999/xhtml" src="http://www.google.com" height="30" width="360"/> 
    </foreignobject> 
    </svg> 

は私が適切に埋め込むためのiframeを得ているように見えるが、何も私のSVGキャンバス上に表示されません。どんな助けもありがとう。

更新:最初のグループの内部でforeignobject要素を移動することで、描画することができますが空です。 iframeはまだ表示されていません。また、埋め込まれたIFRAMEでダミーページを作成することによって、私はIFRAMEの内容を見ることができる午前:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 5.0 Frameset//EN"> 
    <html> 
     <body> 
     <iframe src="test.svg" width="600" height="600"></iframe> 
     </body> 
    </html> 

そしてtest.svgが含まれています

<svg width="600" height="800" xmlns="http://www.w3.org/2000/svg"> 
    <g> 
     <title>Layer 1</title> 
     <g id="0ea5f198be28b719853b18c739002923" name="text_free"> 
     <rect y="40" x="20" stroke-width="0.5" stroke="#22C" fill="#ffffff" height="50" width="350" name="border"/> 
     <text y="60" x="40" xml:space="preserve" text-anchor="left" font-family="serif" font-size="12" name="data" opacity="100" stroke-width="0" stroke="#000000" fill="#000000"></text> 
    </g> 
    <g id="0ea5f198be28b719853b18c7390003e7" name="text_free"> 
    <rect y="90" x="20" stroke-width="0.5" stroke="#22C" fill="#ffffff" height="50" width="350" name="border"/> 
    <text y="110" x="40" xml:space="preserve" text-anchor="left" font-family="serif" font-size="12" name="data" opacity="100" stroke-width="0" stroke="#000000" fill="#000000"></text> 
    </g> 
    <foreignObject height="500" width="500" y="200" x="70"> 
    <iframe xmlns="http://www.w3.org/1999/xhtml" src="http://www.google.com" height="500" width="500"/> 
    </foreignObject> 
</g> 
</svg> 
+0

のforeignObjectにはiframeを追加するためにJavaScriptを使用することができました。私はドキュメント内にsvg要素を埋め込んでいて、svgの中に別のhtml要素を埋め込んでいたため、コンテンツがブロックされているようです。私の特定のケースでは、iframeは私の問題にとって最良の解決策ではありませんでした。 – Jlange

+0

だから何が解決策でしたか? –

+1

私は、私が望むツールバーで私のページの周りにdivを浮かべてしまった。ツールバーのsvgに何かを描画する必要はありませんでした。フローティングディビジョンでもっとうまく動作します。 – Jlange

答えて

1

私は周りのdivを浮動終わりました私の欲しいツールバーのページ。ツールバーのsvgに何かを描画する必要はありませんでした。フローティングディビジョンでもっとうまく動作します。

更新 - 私の本来の目標を達成するためには、SVG名前空間の外部オブジェクトノードを基にSVGに追加するためにjQueryを使用する必要があります。

+1

それは問題ではありませんでした。 JavascriptでSVGにHTMLを動的に埋め込むことができない場合は、その理由を説明してください。あなたが知らないなら、明らかな回避策を答えとして投稿しないでください。 –

+0

私はこの質問を書いたことを見て、私はSVGにHTMLを埋め込むことは不可能だとは決して言わなかった、私は単に私の場合は最良の解決策ではないと述べた。あなたはポスト全体を読むことさえしましたか? – Jlange

+0

私は、外国のオブジェクトタグにiframeを埋め込む方法の例を挙げました。あなたが気をつけて投票を下して、私に答えを叱る前に、投稿全体を読むべきかもしれません。 – Jlange

1

D3.js内から、私は私のソリューションは、すべて一緒のiframeを放棄したXHTMLコンテナを使用して

var the_container=the_foreignObject.append("xhtml:body") 

var the_iframe.append("iframe") 
    .attr("src", function(d) { 
     the_url="http://bl.ocks.org/mbostock/raw/1256572"; 
     return the_url; 
    }) 
    .attr("width", background_width) 
    .attr("height", background_height/2) 
    .attr("frameborder","0") 
; 
関連する問題