J'utilise WebKit dans une application C# pour rendre un document XML de style CSS, et j'aimerais pouvoir ajouter des éléments DOM. Comment puis-je avoir accès au DOM pour le faire? Le problème semble être qu'il n'y a aucune propriété dans la classe WebKitBrowser qui donne accès au membre webView privé. C'est possible? Dois-je modifier la classe pour l'ajouter? Est-ce que je fais juste mal?Comment puis-je accéder au DOM en utilisant WebKit.NET?
3
A
Répondre
0
WebKit.Net, à partir de 0.3.0 semble ne pas avoir accès au codedom. J'ai fait quelque chose de légèrement différent, j'ai utilisé le WebKit.Net, mais j'ai ajouté un écouteur HTTP à l'application, et j'ai mis en place le contrôle pour récupérer les pages à partir de là. De cette façon, j'ai accès aux messages et rappels dans la même application. Le reste je le fais avec JavaScript sur la page elle-même.
HttpListener listener;
public Form1() {
InitializeComponent();
listener = new System.Net.HttpListener();
listener.Prefixes.Add("http://*:88/");
listener.Start();
IAsyncResult result = listener.BeginGetContext(new AsyncCallback( ListenerCallback), listener);
}
public static void ListenerCallback(IAsyncResult result) {
string resp = "<body>test</body";
HttpListener listener = (HttpListener)result.AsyncState;
// Call EndGetContext to complete the asynchronous operation.
try {
HttpListenerContext context = listener.EndGetContext(result);
HttpListenerRequest request = context.Request;
// Obtain a response object.
HttpListenerResponse response = context.Response;
// Construct a response.
string webpage = request.Url.AbsolutePath.Substring(1);
string responseString = null;
if (string.IsNullOrEmpty(webpage)) {
responseString = resp;
}
else {
webpage = webpage.Replace(".", "_");
responseString = webkit_test.Properties.Resources.ResourceManager.GetResourceSet(System.Globalization.CultureInfo.CurrentCulture, true, false).GetObject(webpage) as string;
if (responseString == null) {
responseString = "<html></html><body> 404 Web Page not Found</body>";
}
}
byte[ ] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
// Get a response stream and write the response to it.
response.ContentType = "text/html; charset=UTF-8";
response.ContentLength64 = buffer.Length;
System.IO.Stream output = response.OutputStream;
output.Write(buffer, 0, buffer.Length);
output.Flush();
// You must close the output stream.
output.Close();
IAsyncResult result1 = listener.BeginGetContext(new AsyncCallback(ListenerCallback), listener);
}
catch { }
}
Btw. Ce code lira également la page Web à partir d'une ressource embellie