Проблема с загрузкой в элементе управления 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>
(Обратите внимание, что это только мое лучшее предположение, а не то, что я на самом деле испытал:)