クロムのキャンバスに問題があります。これがよく言及されていることは知っていますが、自分に合った解決策を見つけることができませんでした。
基本的に、次の手順を実行する Web サイトを設計しています。
- ホスティング サーバーから SVG 画像テンプレートをオブジェクトに読み込みます。
- その SVG を操作します (カラーリング、レイヤーの非表示と表示など...)
- 次に、操作されたバージョンをサーバーに送信して、PDF ドキュメントに挿入し、電子メールで送信します。
私の問題は最後のステップにあります。私が使用していたアプローチには、次のものが含まれます。
- SVG のコンテンツ ドキュメントを取得し、その XML をシリアル化します。
var s = new XMLSerializer();
svg = document.getElementById('theSVG').contentDocument;
var xmlTest = s.serializeToString(svg);
onLoad 関数を使用して新しいイメージを定義し、それに src を適用します。
drawImage.src = 'data:image/svg+xml,' + escape(xmlTest);
キャンバス要素を作成し、その画像を描画します。
var canvas = document.createElement('canvas'); var cont = canvas.getContext('2d'); cont.drawImage( drawImage, 0, 0, canvas.width, canvas.height);
最後のステップは、キャンバス要素から dataURI を抽出することです。
var ImageDataURl = canvas.toDataURL();
その後、データ (base64) がサーバーに送信され、ビットマップに変換され、サーバー ディスクに jpeg 画像として保存され、大きな pdf ドキュメントの一部として挿入されます。
Chromeでテストするまではすべてうまくいっていましたが、次のようなセキュリティエラーが発生しました。
Uncaught SecurityError: ユーザー エージェントのセキュリティ ポリシーを突破しようとしました
このエラーについて読んだとき、これはクロス ドメイン イメージのクロム セキュリティの問題であり、何とか何とかしていることを知りました。私が知りたいのは次のことです:
- 新しいキャンバスを作成し、別のドメインからのファイルとして扱われるユーザーのブラウザに画像をロードしていますか?
-サーバー側であっても、これに対する回避策はありますか(私はC#を使用しています)、気にしません。SVG XML をアップロードして base64 文字列に変換しようとしましたが、うまくいきませんでした。
どんな助けでも大歓迎です。