问题描述
我有这样的 web浏览器
在我的网页:
I have this WebBrowser
in my page:
<WebBrowser HorizontalAlignment="Stretch" Name="Browser"
VerticalAlignment="Stretch" Grid.Column="1"/>
现在后,我加载一个网页,我想注入的JavaScript
code有:
Now after i load a page i want to inject a JavaScript
code with :
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);
而在 MYSCRIPT code
我有这个功能:
function checkSomething() {
try{
var xhr = new XMLHttpRequest();
var url = 'weburl';
xhr.open("GET", url, true);
xhr.onreadystatechange = function () {
//Somecode
}
xhr.send();
} catch {
}
}
和我一起运行它:
And i run it with:
Browser.InvokeScript("checkSomething");
这是工作完美,没有任何问题,运行脚本。
It's work perfect and run the script without any problem.
我有另一种状态,我加载本地HTML文件,浏览器:
I have another state that i load local html file to the browser:
Uri uri = new Uri(AppDomain.CurrentDomain.BaseDirectory + @"OfflinePage.html");
Browser.Navigate(uri);
而当我想以运行它:
And when i want to run it with :
Browser.InvokeScript("checkSomething");
这行脚本的GET例外 - 被拒绝的权限:
This line in the script get exception - Permission Denied:
xhr.open("GET", url, true);
为什么发生任何想法?为什么它在一个页面,我从网页加载工作,而不会在一个地方的HTML工作?
Any idea why it happen? why it work in a page that i load from web and won't work in a local html?
推荐答案
您最初的页面 OfflinePage.html
来自本地文件系统,而你的XHR网址是网页地址。 web浏览器
禁止这是一个跨域安全限制。您可以使用 XDomainRequest 以解决这个问题,但在Web服务器应该给予明确同意跨域请求通过包括访问控制 - 允许 - 产地:响应*
HTTP标头。在HTTP访问控制(CORS)更多信息这里。
Your initial page OfflinePage.html
comes from the local file system, while your XHR URL is a web address. WebBrowser
prohibits this as a cross-domain security restriction. You can use XDomainRequest to solve the problem, but the web server should give explicit consent to cross-domain requests by including Access-Control-Allow-Origin: *
HTTP header in response. More info on HTTP Access Control (CORS) here.
这篇关于WPF web浏览器的JavaScript加载的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!