【问题标题】:Wpf WebBrowser load javascriptWpf WebBrowser 加载 javascript
【发布时间】:2013-12-08 09:15:49
【问题描述】:

我的页面中有这个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);

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

【问题讨论】:

    标签: c# .net wpf webbrowser-control


    【解决方案1】:

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

    【讨论】:

    • 谢谢哥们!!这真的是因为我将文件加载到浏览器
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    • 2011-05-22
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多