html5 キャンバスでこの問題が発生しています。EaselJS を使用して画像を読み込みます。
しかし、マウスを動かした瞬間から、画像の親コンテナーに何らかの種類のマウス イベント (onClick、onMouseOver、onMouseOut) を追加すると、EaselJS は次のエラーをスパムします。
キャッチされない例外: エラーが発生しました。これは、ローカルまたはクロスドメインのイメージでキャンバス ピクセル データを読み取る際のセキュリティ制限が原因である可能性が最も高いです。
IIS サーバーで実行されており、取得したイメージは他のドメインからのものです。--disable-web-security を使用して Chrome で動作させることができます。でも、それは避けたほうがいいです。
プロキシ スクリプトがこれを修正するのに役立つ可能性があることについて読んだことがありますが、ここでそれを実装する方法が正確にはわかりません。
修正のための提案はありますか?
編集:解決しました!シンプルなasp.netプロキシスクリプトを使用してこれを解決しました
http://www.sharepointjohn.com/aspnet-proxy-page-cross-domain-requests-from-ajax-and-javascript/
私はこれから始め、同僚の助けを借りて、この .ashx ファイルにたどり着きました:
<%@ WebHandler Language="C#" Class="getSharepointImage" %>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net;
using System.IO;
using System.Drawing;
public class getSharepointImage : IHttpHandler {
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/plain";
string proxyURL = string.Empty;
try
{
proxyURL = HttpUtility.UrlDecode(context.Request.QueryString["u"].ToString());
}
catch { }
if (proxyURL != string.Empty)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(proxyURL);
//request.Credentials = new NetworkCredential("username", "password"); //needed if you wish to access something like sharepoint
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode.ToString().ToLower() == "ok")
{
string contentType = "img/png";
Stream content = response.GetResponseStream();
StreamReader contentReader = new StreamReader(content);
context.Response.ContentType = contentType;
var outStream = context.Response.OutputStream;
Bitmap myImage = new Bitmap(System.Drawing.Image.FromStream(response.GetResponseStream()));
MemoryStream writeStream = new MemoryStream();
myImage.Save(outStream, System.Drawing.Imaging.ImageFormat.Png);
writeStream.WriteTo(outStream);
myImage.Dispose();
}
}
}
public bool IsReusable {
get {
return false;
}
}
}