gpt4 book ai didi

c# - Wpf WebBrowser 加载 javascript

转载 作者:行者123 更新时间:2023-11-30 12:09:47 24 4
gpt4 key购买 nike

我的页面中有这个 WebBrowser:

<WebBrowser HorizontalAlignment="Stretch" Name="Browser"
VerticalAlignment="Stretch" Grid.Column="1"/>

现在,在我加载一个页面后,我想注入(inject)一个 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);

知道为什么会这样吗?为什么它可以在我从网络加载的页面中工作,而不能在本地 html 中工作?

最佳答案

您的初始页面 OfflinePage.html 来自本地文件系统,而您的 XHR URL 是一个网址。 WebBrowser 禁止将此作为跨域安全限制。您可以使用 XDomainRequest解决问题,但 Web 服务器应明确同意跨域请求,方法是在响应中包含 Access-Control-Allow-Origin: * HTTP header 。有关 HTTP 访问控制 (CORS) 的更多信息 here .

关于c# - Wpf WebBrowser 加载 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20451712/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com