C# Webkit 不会显示 Html

标签 c# html webkit

我已将 WebKit.Net 中的 WebkitBrowser 包含到我的 C# 项目中,它可以正常工作,除非我想加载 Html string 。这是我要显示的 Html:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <!--<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />-->
    <meta name="viewport" content="width=device-width, initial-scale=2">
    <meta name="description" content="">
    <meta name="author" content="">
    <title>mentor+</title>
    <link href="http://fonts.googleapis.com/css?family=Lato:300,400,700,300italic,400italic,700italic" rel="stylesheet" type="text/css">
    <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
    <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
<link rel="stylesheet" type="text/css" href="./wicket/resource/org.apache.wicket.Application/css/style-ver-1463736306000.css" />
<link rel="stylesheet" type="text/css" href="./wicket/resource/org.apache.wicket.Application/css/landingpage-ver-1463664722000.css" />
<link rel="stylesheet" type="text/css" href="./wicket/resource/org.apache.wicket.Application/font-awesome/css/font-awesome.min-ver-1448702160000.css" />
<link rel="stylesheet" type="text/css" href="./wicket/resource/org.apache.wicket.Application/vis/vis.min-ver-1460038992000.css" />
<link rel="stylesheet" type="text/css" href="./wicket/resource/de.agilecoders.wicket.webjars.request.resource.WebjarsCssResourceReference/webjars/bootstrap/3.3.6/css/bootstrap-ver-1455709722000.css" />
</head>
    <body>
    <div>

    </div>

<div>
<div class="container-fluid">

    <div class="bs-example">

        <div class="jumbotron">

            <div id="mynetwork" ></div>
        </div>
    </div>
</div>
</div>
    <footerbucket><script type="text/javascript" src="./wicket/resource/org.apache.wicket.resource.JQueryResourceReference/jquery/jquery-1.12.0-ver-1457005336000.js"></script>
<script type="text/javascript" src="./wicket/resource/org.apache.wicket.ajax.AbstractDefaultAjaxBehavior/res/js/wicket-event-jquery-ver-1457005336000.js"></script>
<script type="text/javascript" src="./wicket/resource/org.apache.wicket.Application/js/topButton-ver-1462984064000.js"></script>
<script type="text/javascript" src="./wicket/resource/org.apache.wicket.Application/js/jquery-1-12-1-min-ver-1462366394000.js"></script>
<script type="text/javascript" src="./wicket/resource/org.apache.wicket.Application/vis/vis.min-ver-1463655366000.js"></script>
<script type="text/javascript" src="./wicket/resource/org.apache.wicket.Application/js/networkgraph-ver-1463047612000.js"></script>
<script type="text/javascript" src="./wicket/resource/de.agilecoders.wicket.core.markup.html.references.JQueryMigrateJavaScriptReference/js/jquery-migrate-1.3.0-ver-1457345416000.js">    </script>
<script type="text/javascript" id="bootstrap-js" src="./wicket/resource/de.agilecoders.wicket.webjars.request.resource.WebjarsJavaScriptResourceReference/webjars/bootstrap/3.3.6/js/bootstrap-ver-1455709722000.js"></script>
<script type="text/javascript" >
/*<![CDATA[*/
Wicket.Event.add(window, "load", function(event) { 
createNetwork(new vis.DataSet([{"id":0,"label":"Amalie","color":"#FA5858"},{"id":1,"label":"Daniel","color":"#2E64FE","shape":"box"},{"id":2,"label":"Carola","color":"#01DF01","shape":"ellipse"},{"id":3,"label":"Annette","color":"#58FAF4","shape":"ellipse"},{"id":4,"label":"Marius","color":"#58FAF4","shape":"box"}]),new vis.DataSet([{"id":0,"from":0,"to":1,"length":80,"width":6,"color":"#2E64FE"},{"id":1,"from":0,"to":2,"length":40,"width":6,"color":"#01DF01"},{"id":2,"from":0,"to":3,"length":40,"width":6,"color":"#58FAF4"},{"id":3,"from":0,"to":4,"length":40,"width":6,"color":"#58FAF4"}]));
;});
/*]]>*/
</script>
</footerbucket>
</html>
</body>

我将它与服务器地址一起用于 Cefsharp,它有效:

ChromiumWebBrowser cef = new ChromiumWebBrowser();
cef.LoadHtml(responseFromServer, server + "home");

如您所见,一个参数是服务器地址。

如果我将 Html 字符串导出到一个文件中并尝试使用任何浏览器加载它,它也不起作用,所以我认为需要提供服务器地址,但我找不到任何合适的方法。你能帮帮我吗?

编辑:

现在我从服务器编辑了代码,它将与 POST 参数一起工作,并且它在每个浏览器中都工作。除了 WebKit!

URL 现在看起来像这样:

http://mentorplus.de/networkgenerator/getNetworkgraph?network=[{%22focusPerson%22:%22Amalie%22,%22memberList%22:[{%22role%22:%22MENTOR%22,%22name%22:%22Daniel%22,%22gender%22:%22MALE%22,%22relationship%22:%22FRIENDS%22,%22emotionalRelationship%22:%22NORMAL%22,%22distance%22:%22TWOHOUR%22},{%22role%22:%22MENTOR%22,%22name%22:%22Carola%22,%22gender%22:%22FEMALE%22,%22relationship%22:%22FAMILY%22,%22emotionalRelationship%22:%22NORMAL%22,%22distance%22:%22ONEHOUR%22},{%22role%22:%22NETWORKMEMBER%22,%22name%22:%22Annette%22,%22gender%22:%22FEMALE%22,%22relationship%22:%22OTHER%22,%22emotionalRelationship%22:%22NORMAL%22,%22distance%22:%22ONEHOUR%22},{%22role%22:%22NETWORKMEMBER%22,%22name%22:%22Marius%22,%22gender%22:%22MALE%22,%22relationship%22:%22OTHER%22,%22emotionalRelationship%22:%22NORMAL%22,%22distance%22:%22ONEHOUR%22}]}]&authenticated=tellur

那么 WebKit 的问题到底是什么?也许是脚本?

编辑 2:

有趣的是,使用标准 Wpf 浏览器是可行的。所以我将此线程标记为已回答,但我仍然对解决方案感兴趣

非常感谢!

最佳答案

不幸的是,没有一种直接的方法可以使用 WebKitBrowser 来做到这一点来自 WebKit.NET .但是,应该可以通过跳过几个循环来加载 HTML 字符串。

在内部,WebKitBrowserCore类在 DocumentText 属性的设置方法中使用对 _webView.mainFrame().loadHTMLString(Text, null) 的调用。这证实至少可以在内部进行某种 HTML 加载。但是这个方法在原生的WebKit WebView中,需要修改工程才能访问。

我会创建一个项目的分支并进行以下更改。

  1. WebKitBrowserCore 添加一个名为 LoadHTMLString 的新方法,其中包含两个 HTML 字符串参数和服务器地址。
  2. 使用参数调用 _webView.mainFrame().loadHTMLString(html, server); 方法。
  3. LoadHTMLString 方法公开给 WebKitBrowser类的方式与其他方法相同,例如 Navigate 方法(它只是调用核心的 Navigate 方法。

我现在无法对此进行测试,所以我不完全确定 WebView 的内部 loadHTMLString 方法是否按预期工作。

编辑: 看起来您也可以使用 WebKitBrowser 中的 GetWebView 方法,直接调用 mainFrame().loadHTMLString() 方法像这样(语法可能不正确,但你会明白的):

(IWebView)webKitBrowser.GetWebView()).mainFrame().loadHTMLString(html, server);

编辑 2: 我刚刚意识到 WebKit 是一个开源项目,很容易验证 loadHTMLString 是否按照我的想法进行。以下是 WebFrame.h 头文件的摘录:

/*!
    @method loadHTMLString:baseURL:
    @param string The string to use for the main page of the document.
    @param URL The base URL to apply to relative URLs within the document.
    - (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)URL;
*/

HRESULT loadHTMLString([in] BSTR string, [in] BSTR baseURL);

这正是您需要调用的方法,也是 CEFSharp 内部调用的方法。

关于C# Webkit 不会显示 Html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39405581/

相关文章:

javascript - 自动调整图像大小以适应浏览器

css - 溢出:auto causing scrolling/scroll bars to show up in Safari

c# - Entity Framework 6 中的 Fluent Api 不兼容 Entity Framework Core

c# - 如何在返回相同对象类型的列表时显示Json对象名称/标签

javascript - 如何使用 javascript 或 jQuery 处理多个 HTML 中的公共(public)代码

html5视频码率切换

Css 掩码不适用于 Chrome (Webkit)

google-chrome - 如何在 Chrome 中检测闪烁

c# - 一个方法如何只包含一个 NotImplementedException 并且仍然运行而不抛出?

c# - 如何将参数传递给使用 System.Action 作为输入参数的数据访问层?