この質問は、ここで尋ねられた質問の完全に更新されたバージョンと非常によく似ています。ファイルプロトコルを使用してChrome / Webkitのあるフレームから別のフレームにJavaScript関数を呼び出す方法—残念ながら、その質問は実際には回答されませんでした。
iframeにSVG画像を含むHTMLページがあります。SVGはJavaScriptAPIをエクスポートして、便利なことを実行できるようにします(ズームおよび中央にリセットし、「実際のサイズ」で表示します)。iframeの下に、ユーザーがその呼び出しをクリックしてSVGで定義された関数にアクセスできるボタンを配置しました。
私のコードは次のようになります:
function reset() {
document.getElementByID('iframe').contentWindow.reset();
}
Safari、Firefox、さらにはIE 9(SVGをサポートしています-やったー!)でも完全に機能します。しかし、Chromeでは失敗します。デバッガーから次のように通知されます。
Property 'reset' of object [object DOMWindow] is not a function
。
実際、これには真実があるようです。「contentWindow」はDOMWindow型ですが、メソッドやフィールドはありません(少なくとも、デバッガーが表示するわけではありません)。'document'フィールドを要求しても失敗します(nullが生成されます)。
摩擦は、file://プロトコルを使用して、含まれているHTMLと含まれているSVGの両方を転送することのようです。上で参照した質問で述べたように、「contentWindow」にアクセスしようとすると、Chromeは次のエラーを生成します。
Attempt to access frame with URL file://[...]/contained.svg from frame with URL file://[...]/container.html. Domains, protocols and ports must match.
一般的に、セキュリティは素晴らしいと思います。これは、セキュリティに触発された制限のように見えます。しかし、ここでは、行き過ぎているようです。これらは、結局のところ、ユーザーのファイルシステム上のファイルであり、私の場合は、同じディレクトリにさえあります。
コードをホストすることはオプションではありません-それはユーザーのマシン上に存在しなければなりません。「Chromeは使用しないでください。セキュリティの概念がばかげている」と人々に言わなければならないのは嫌です。
この制限を回避する方法はありませんか?