我已将 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中,需要修改工程才能访问。
我会创建一个项目的分支并进行以下更改。
- 向
WebKitBrowserCore
添加一个名为 LoadHTMLString 的新方法,其中包含两个 HTML 字符串参数和服务器地址。 - 使用参数调用
_webView.mainFrame().loadHTMLString(html, server);
方法。 - 将
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/