Почему google.com выглядит по-другому на blackberry и phonegap по сравнениюblackberry и браузер

StackOverflow https://stackoverflow.com/questions/838069

Вопрос

Я пытаюсь запустить phonegap на blackberry storm (симулятор 9530).Я тестировал свое веб-приложение из встроенного браузера BB, и оно выглядело нормально, но затем оно полностью отключилось, когда я попытался просмотреть некоторый код из phonegap, хотя я указывал phonegap на тот же URL (я еще не дошел до того, чтобы запускать код локально на устройстве).

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

Браузер http://www.eleganttechnologies.com/outside/ImgDeviceBB9530WebGoogle.jpg

Телефонный звонок http://www.eleganttechnologies.com/outside/ImgDeviceBB9530PgGoogle.jpg

[Обновление] Чтобы пролить некоторый свет на происходящее, я запустил браузер и встроенный браузер (phonegap) для тестирования W3 mobile web acid: http://www.w3.org/2008/06/mobile-test/ Я определенно замечаю различия между ними, но я пока не знаю, "почему" и "как обращаться".

Acid через встроенный браузер
(источник: eleganttechnologies.com)
Кстати - я запустил это ранее сегодня и получил на пару зеленых квадратов больше, чем только что.

Acid через браузер, встроенный в phonegap http://www.eleganttechnologies.com/outside/ImgDeviceBb9530PgAcid.jpg

Это было полезно?

Решение

Отказ от ответственности:Я ничего не знаю о phonegap, но у меня есть довольно хорошая теория.По умолчанию встроенный элемент управления браузером в BlackBerry использует более старую версию механизма рендеринга, чем сам браузер BlackBerry.

На прошлогодней конференции разработчиков BlackBerry был сделан доклад об этом, и есть недокументированная возможность использовать более новый движок рендеринга.\

Идентификатор опции равен 17000 (да, магическое число, которое можно изменить, использовать на свой страх и риск и т.д.), и для него должно быть установлено значение true.Не уверен, как вы передадите эту опцию через phonegap (я не знаком с инструментарием), но с помощью BlackBerry APIs это что-то вроде:

BrowserContent content;
...
content.getRenderingOptions().setProperty(RenderingOptions.CORE_OPTIONS_GUID, 17000, true);

Другие советы

Я не знаю особенностей браузеров, которые вы используете, но я знаю, что большинство крупных сайтов определят вашу комбинацию OS + browser, чтобы решить, какой HTML вам показывать.

Если Google использует другой пользовательский агент, вы можете получить общую мобильную версию HTML вместо специфичного для Blackberry HTML, который вы получаете для встроенного браузера.

Если у вас есть доступ к веб-серверу, попробуйте использовать его в настройках обоих браузеров и посмотрите, есть ли какая-либо разница в файле журнала.Это могло бы рассказать вам кое-что интересное.

Как мы можем видеть из ваших кислотных тестов...

Один браузер (встроенный) сообщает корректно как BlackBerry9530, а другой (phonegap) не представляет user-agent ["Тестирование с помощью ."].В этом случае Google предоставляет вам вид своей домашней страницы по умолчанию, тогда как когда вы сообщаете о себе как об устройстве BlackBerry, вы получите рендеринг, специфичный для BlackBerry.

Судя по всему, использование phonegap приводит к удалению пользовательского агента по умолчанию (скорее всего, потому, что он не распознает ваше устройство).Поскольку phonegap имеет открытый исходный код, лучше всего зайти туда, отладить его и выяснить, что происходит с пользовательским агентом, когда http-запросы покидают устройство, и отслеживать их оттуда.

Может быть, у одного браузера есть возможности, которых нет у другого?

Хм.Посмотрев на скриншот, я бы сказал, что на второй странице, вероятно, отсутствуют некоторые ресурсы.Возможно, отсутствуют некоторые изображения, скрипты и CSS-файлы, которые объясняли бы разницу в l & f.Зная, как работает Blackberry Browser Field API, я бы предположил, что реализация, использующая BrowserField, была выполнена неправильно.Просто мое предположение.В дополнение к этому, когда поле браузера инициализировано, вызывающему абоненту необходимо правильно настроить его, включив соответствующие функции браузера - скрипты, стили и т.д.Опять же, API выполнен очень странным способом, однажды я сам попал в эту ловушку.При настройке параметров вы не можете просто создать одну маску (например, CSS | WML | SCRIPT) и выполнить один вызов.Параметры являются числовыми и, я полагаю, неперекрывающимися, но вам все равно нужно вызвать API для настройки каждого параметра независимо.

Кроме того, для понимания способа асинхронной загрузки ресурсов для BrowserField требуется время.

Только мои 0,02 доллара.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top