WebBrowser
我的页面中有这个:
<WebBrowser HorizontalAlignment="Stretch" Name="Browser"
VerticalAlignment="Stretch" Grid.Column="1"/>
现在,我加载页面后,我想注入JavaScript
代码:
var doc = (HTMLDocument)Browser.Document;
var head = doc.getElementsByTagName("head").Cast<HTMLHeadElement>().First();
var script = (IHTMLScriptElement)doc.createElement("script");
script.text = MYSCRIPTCODE;
head.appendChild((IHTMLDOMNode)script);
在MYSCRIPTCODE
我有这个功能:
function checkSomething() {
try{
var xhr = new XMLHttpRequest();
var url = 'weburl';
xhr.open("GET", url, true);
xhr.onreadystatechange = function () {
//Somecode
}
xhr.send();
} catch {
}
}
我用它运行:
Browser.InvokeScript("checkSomething");
它是完美的工作,并且可以毫无问题地运行脚本。
我有另一种状态,我将本地html文件加载到浏览器中:
Uri uri = new Uri(AppDomain.CurrentDomain.BaseDirectory + @"OfflinePage.html");
Browser.Navigate(uri);
当我想使用它运行时:
Browser.InvokeScript("checkSomething");
脚本中的此行获取异常-权限被拒绝:
xhr.open("GET", url, true);
知道为什么会发生吗?为什么它可以在我从Web加载的页面中工作而不能在本地html中工作?
您的初始页面OfflinePage.html
来自本地文件系统,而您的XHR URL是一个网址。WebBrowser
禁止将此作为跨域安全限制。您可以使用XDomainRequest解决问题,但是Web服务器应通过Access-Control-Allow-Origin: *
在响应中包含HTTP标头来明确同意跨域请求。有关HTTP访问控制(CORS)的更多信息,请参见此处。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句