Проблемы с просмотром страниц HTML5 в WPF-приложении .Net-4.0. - PullRequest
0 голосов
/ 19 августа 2011

Я относительно новичок в C # и .Net, и это мой первый проект WPF, поэтому я надеюсь, что это всего лишь случай отсутствия знакомства и слабого Google-Fu с моей стороны.

Мне нужно создать окно предварительного просмотра для инструмента разработки HTML5. Страницы будут содержать аудио javascript, ogg vorbis и / или mpeg4 (m4a) и изображения png.

Кажется, что элемент управления Frame работает нормально для просмотра файла. Сначала я попробовал элемент управления WebBrowser, но, похоже, он основан на IE7, который не поддерживает необходимую мне функциональность. Кажется, что Frame использует установленный IE9, что мне и нужно. Кажется, проблема в загрузке контента.

Я могу заставить его работать, если страница размещена на веб-сервере на основе Apache, но это определенно не является предпочтительным решением. Профессиональные веб-разработчики не являются целевой аудиторией, поэтому я считаю, что нецелесообразно ожидать, что пользователи смогут установить и настроить его. Я пытался реализовать простой сервер, используя HttpListener, но (а) он, кажется, не работает лучше, чем просто установка Frame Source = "C: /test_project_path/index.html" напрямую, и (b) Я не хочу создавать никаких проблем, если у пользователя уже есть веб-сервер, работающий на его компьютере. У меня возникли проблемы с исключениями «конфликты с существующей регистрацией» при попытке добавить префикс - даже если у меня не установлен другой веб-сервер, не говоря уже о работе, и я убедился, что больше ничего не использует этот порт - что делает я не решаюсь на это положиться.

То, что я действительно хотел бы сделать, это:

myFrame.Navigate("C:/test_project_path/index.html");

Это почти работает. Кажется, я получаю графические элементы, но приложение javascript вылетает с ошибкой «Невозможно получить значение свойства: объект пуст или не определен». Поскольку, как я уже сказал, он работает при работе с Apache, похоже, проблема в том, что не все файлы javascript загружаются правильно.

Мои вопросы:

Есть ли какие-то настройки, которые мне не хватает? Я получаю предупреждение безопасности об активном контенте, который я должен щелкнуть. Я бы хотел избавиться от этого, но сейчас я не беспокоюсь, если это не имеет прямого отношения к моей нынешней проблеме.

Есть ли какой-нибудь способ проверить, выполняет ли элемент управления Frame все необходимые подзапросы для загрузки страницы и выполняются ли они? Надевая часы на myFrame, я вижу только начальную страницу (index.html). Похоже, нет способа определить, существуют ли различные подэлементы, кроме того, что отображает myFrame, и ошибок javascript, которые я получаю.

Нужно ли вызывать файлы javascript с помощью InvokeScript () или это просто для доступа к функциям из элемента управления WPF?

1 Ответ

1 голос
/ 24 августа 2011

Редактировать: Более общее решение можно найти здесь: http://forums.devshed.com/net-development-87/serving-images-using-httplistener-414552.html Кажется, это работает для всех типов файлов, с которыми я имею дело.

Кажется, проблема в том, как сервер кодировал нетекстовые файлы для выходного потока.Я делал это так, более или менее так, как это было сделано в большинстве примеров, которые я нашел в Интернете:

StreamReader streamReader = new StreamReader(requestUrl);
byte[] buffer = Encoding.UTF8.GetBytes(streamReader.ReadToEnd());
response.ContentLength64 = buffer.Length;
response.OutputStream.Write(buffer, 0, buffer.Length);
response.OutputStream.Close();

Это отлично работает для текстовых файлов, таких как html и javascript, но для изображений этоказалось, добавляет кучу лишнего мусора, в основном удваивая размер файла.Решением было прочитать изображение как изображение, а затем сохранить его в выходном потоке:

Image image1 = Image.FromFile(requestUrl);
image1.Save(response.OutputStream, System.Drawing.Imaging.ImageFormat.Png);
response.OutputStream.Close();

Очевидно, вам нужно изменить ImageFormat для обработки любых типов изображений, которые вы хотите обслуживать.Это работает для PNG, и я подозреваю, что решение для звуковых файлов аналогично, хотя я еще не разработал.

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