如何进行交叉领域要求在一个网页浏览器控制?
-
03-07-2019 - |
题
如你所知这样做的跨域XMLHTTP请求是不允许出于安全原因,在互联网浏览器。
我有一个网页浏览器控制和我用的 DocumentText
而不是的 Navigate
以一个网址。由于当前域是 about:blank
当页试图做的请求本身或其他领域我 Access is denied
Javascript错误。
甚至当我用 Navigate
如果Javascript做一请求的另一个领域,它不会的工作。
我怎么可以围绕这个吗?
这HTML码应该与网页浏览器控制:
<body>
<a href="javascript:getit('http://www.google.com')">this should work</a>
<div id="x"></div>
</body>
<script>
function XHConn()
{
var xmlhttp, bComplete = false;
try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }
catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
catch (e) { try { xmlhttp = new XMLHttpRequest(); }
catch (e) { xmlhttp = false; }}}
if (!xmlhttp) return null;
this.connect = function(sURL, sMethod, sVars, fnDone)
{
if (!xmlhttp) return false;
bComplete = false;
sMethod = sMethod.toUpperCase();
try {
if (sMethod == "GET")
{
xmlhttp.open(sMethod, sURL+"?"+sVars, true);
sVars = "";
}
else
{
xmlhttp.open(sMethod, sURL, true);
xmlhttp.setRequestHeader("Method", "POST "+sURL+" HTTP/1.1");
xmlhttp.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
}
xmlhttp.onreadystatechange = function(){
if (xmlhttp.readyState == 4 && !bComplete)
{
bComplete = true;
fnDone(xmlhttp);
}};
xmlhttp.send(sVars);
}
catch(z) { return false; }
return true;
};
return this;
}
function getit(url){
var xmlhttp = new XHConn();
var fnWhenDone = function (oXML) { document.getElementById('x').innerHTML = oXML.responseText; alert(oXML.responseText); };
xmlhttp.connect(url, "GET", "", fnWhenDone);
}
</script>
- 我不能控制Javascript/HTML代码,我的主机应用程序只一个网页浏览器控制
- 我找到一些所谓的 CROSS_DOMAIN_DATA URL行动的标志, 不知道这是否是正确的方向。甚至它的我不知道该如何来实现它。
- 如果你可以回答这个问题: 如何设置前文件。域中的网页浏览器的控制,以避免"拒绝访问"? 那是对我来说足够好。
解决方案
我发现一个肮脏的解决方法、负载一个当地HTML(c: emp emp.html),然后修改的内容通过javascript。
这一点后,没有更多的制跨域限制,但是使用的文件。写造成其他令人讨厌的问题,例如JQuery .ready
功能不会的工作。
其他提示
检查此,它的工作对我来说就像一个魅力。http://support.microsoft.com/default.aspx?scid=kb;en-us;246227
我不明白在这域没有访问的Javascript...你有没有尝试过使用 脚本 标记,以获得的数据,你想从一个不同的领域?你可以使用 他 成语名字空间数据...
var head = document.getElementsByTagName("head")[0];
var script = document.createElement("script");
script.src = "anotherdomain.com/data?callback=myFunction";
head.appendChild(script);
然后在"数据":
myFunction({
// data here
});
URLACTION交域的数据似乎是正确的方向:读这个给找出为什么
只有这样,才能做到这是为了确保你的代码运行在信任区域(或更高等的HTA).默认情况下,任何内部运行的网页浏览器控制运行中的区域文件,这些文件正在提供服务。(即该标准,即安全政策正在使用。)
要改变这种行为,则需要更改的应用程序托管的网页浏览器控制和执行几个接口,网页浏览器的控制。(IInternetHostSecurityManager,IInternetZoneManager和IInternetSecurityMgrSite是那些你应该看一看。) 这不是一个简单的任务和有关文件,这是稀缺的。
一旦这样做,你的代码可以运行的任何特权你需要的,而跨领域的请求只是作为容易,因为重Mime-扫高的分数。
希望这会有所帮助。