Как я могу получить доступ к DOM с помощью WebKit.NET? - PullRequest
3 голосов
/ 11 августа 2009

Я использую WebKit в приложении C # для визуализации XML-документа в стиле CSS, и я хотел бы иметь возможность добавлять элементы DOM. Как мне получить доступ к DOM для этого? Кажется, проблема в том, что в классе WebKitBrowser нет свойства, предоставляющего доступ к закрытому члену webView. Является ли это возможным? Нужно ли изменить класс, чтобы добавить это? Я просто делаю это неправильно?

1 Ответ

0 голосов
/ 24 февраля 2010

WebKit.Net, начиная с версии 0.3.0, похоже, не имеет доступа к кодексу. Я сделал что-то немного другое, я использовал WebKit.Net, но я добавил в приложение прослушиватель HTTP и настроил элемент управления для получения страниц оттуда. Таким образом, у меня есть доступ к сообщениям и обратным вызовам в одном приложении. Остальное я делаю с помощью JavaScript на странице само.

        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. Этот код также будет читать веб-страницу из встроенного ресурса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...