我正在尝试使用WebClient#DownloadStringAsync()获取http://www.yahoo.com的内容。然而,由于Silverlight不允许跨域调用,所以我选择了TargetInvocationException。我知道我们必须将clientaccesspolicy.xml和crossdomain.xml放在我们的web服务器根目录中,但只有当我对我的服务有控制权时,这才是可能的。目前Google不在我的控制之下;),那么我该如何处理它呢?
我已经做了一个变通方法,在我的web应用程序中创建一个WCF服务,然后调用WebClient。这是完美的,但它是相当无效的。还有比这更好的方法吗?
提前感谢:)
发布于 2010-12-24 03:00:08
Silverlight的跨域约束导致许多开发人员实现变通方法。如果您需要显示返回的html页面,您应该查看Silverlight4 (WebBrowser)控件,尽管这似乎只在运行浏览器外模式时有效。
如果您需要解析内容,可以尝试以下一些方法:
代码:
var xmlHttpRequestHandler = new Object();
var requestObject;
xmlHttpRequestHandler.createXmlHttpRequest = function(){
var XmlHttpRequestObject;
if(typeof XMLHttpRequest != "undefined")
{
XmlHttpRequestObject = new XMLHttpRequest();
}
else if(window.ActiveXObject)
{
var tryPossibleVersions =["MSXML2.XMLHttp.5.0", "MSXML2.XMLHttp.4.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp","Microsoft.XMLHttp"];
for(i=0;i<tryPossibleVersions.length;i++)
{
try
{
XmlHttpRequestObject = new ActiveXObject(tryPossibleVersions[i]);
break;
}
catch(xmlHttpRequestObjectError)
{
// Ignore Exception
}
}
}
return XmlHttpRequestObject;}
function getHtml(){
var url = document.getElementById('url').value;
if(url.length > 0)
{
requestObject = xmlHttpRequestHandler.createXmlHttpRequest();
requestObject.onreadystatechange=onReadyStateChangeResponse;
requestObject.open("Get",url, true);
requestObject.send(null);
}}
function onReadyStateChangeResponse(){
var ready, status;
try
{
ready = requestObject.readyState;
status = requestObject.status;
}
catch(e) {}
if(ready == 4 && status == 200)
{
alert(requestObject.responseText);
}}https://stackoverflow.com/questions/4471983
复制相似问题