Проблема с загрузкой в ​​элементе управления WebBrowser для httpwebresponse в WP7 & 8

Я пытаюсь загрузить веб-браузер с HTML-кодом из httpwebresponse, сохраняя его в строковой переменной.

Я создал httpwebrequest для URL, установив в нем файлы cookie и получив HTML-страницу в httpwebResponse.

Я пытаюсь отобразить его в элементе управления веб-браузера, сохранив код в строковой переменной. И навигация в браузере ("browse.NavigateToString (string)").

Но здесь страница не загружается должным образом. Она не отображает какие-либо CSS или изображения и отображает сообщение "Вам необходимо включить сценарий Java, чтобы отобразить содержимое".

Я сделал свойство веб-браузера (IsScriptEnabled) истинным перед навигацией. Но он по-прежнему показывает сообщение и содержимое загружено неправильно.

Файлы cookie также не добавляются в элементы управления веб-браузера (сеанс не поддерживается в приложении).

Есть какое-то решение или обойти это?

Пожалуйста, обратитесь к приведенному ниже коду:Для регистрации файлов cookie из службы входа:

закрытое пространство PostLoginRequest () {

        string AuthServiceUri = "Service URL";
        HttpWebRequest AuthReq = HttpWebRequest.Create(AuthServiceUri) as HttpWebRequest;
        AuthReq.CookieContainer = new CookieContainer();
        AuthReq.ContentType = "application/x-www-form-urlencoded";
        AuthReq.Method = "POST";

        AuthReq.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), AuthReq);
    }

    void GetRequestStreamCallback(IAsyncResult callbackResult)
    {
        HttpWebRequest Request = (HttpWebRequest)callbackResult.AsyncState;

        Stream postStream = Request.EndGetRequestStream(callbackResult);
        string postData = "Postdata parameters";
        byte[] byteArray = Encoding.UTF8.GetBytes(postData);
        postStream.Write(byteArray, 0, byteArray.Length);
        postStream.Close();
        myRequest.BeginGetResponse(new AsyncCallback(GetResponsetStreamCallback), Request);

    }

    void GetResponsetStreamCallback(IAsyncResult callbackResult)
    {

        try
        {

            HttpWebRequest callBackRequest = (HttpWebRequest)callbackResult.AsyncState;

            HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(callbackResult);

            CookieCollection cookiecollec = new CookieCollection();
            cookiecollec = response.Cookies;
            App.cookieCollection = cookiecollec; //global varaiable

        }
        catch (Exception e)
        {
    MessageBox.Show(e.Message);
        }
    }

Еще один httpwebrequest с зарегистрированными куки:

private void ResponsivePostURL (строка PageName, строка PostURL, строка PostDatas) {

                    Uri ServiceUri = new Uri(PostURL); //Service URL

                    HttpWebRequest requestURL = HttpWebRequest.CreateServiceUri as HttpWebRequest;
                    requestURL.ContentType = "application/x-www-form-urlencoded";
                    requestURL.Method = "POST";                        
                    requestURL.CookieContainer = new CookieContainer();
                    requestURL.CookieContainer.Add(ServiceUri, App.cookieCollection);

                    requestURL.BeginGetResponse(new AsyncCallback(GetResponsetStreamCallback), requestURL); 


             }

void GetResponsetStreamCallback (IAsyncResult callbackResult) {

             try
             {

                 HttpWebRequest request = (HttpWebRequest)callbackResult.AsyncState;
                 HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(callbackResult);


                // MessageBox.Show(response.Cookies.ToString());

                 string responseString = "<html><head></head><body>";
                 Stream streamResponse = response.GetResponseStream();
                 StreamReader reader = new StreamReader(streamResponse);
                 responseString = responseString + reader.ReadToEnd() + "</body></html>";                   
                 streamResponse.Close();
                 reader.Close();
                 response.Close();



                 this.Dispatcher.BeginInvoke(() =>
                 {

                     webBrowser.IsScriptEnabled = true;
                     webBrowser.NavigateToString(responseString);

                 });
             }
             catch (Exception ex)
             {
                 MessageBox.Show(ex.Message);
             }
         }

1 ответ

Когда вы переходите на сайт и сохраняете документ, вы не получаете script, css ни image файлы (и любой другой ресурс в этом отношении), но только статический / сгенерированный документ HTML как есть, который, вероятно, ссылается на эти файлы с использованием относительных путей. Если пути не являются абсолютными, scripts/css/images/ другие ресурсы не найдены.

Если вы хотите, чтобы это работало, вам нужно заменить относительные пути абсолютными путями в файле HTML.

Так что если у вас есть

<script src="/scripts/cool.js"></script>

Вы бы заменили его

<script src="http://www.thesite.com/scripts/cool.js"></script>

(Обратите внимание, что это только мое лучшее предположение, а не то, что я на самом деле испытал:)