2014-10-20 1 views
0

У нас есть веб-приложение SPA, которое мы пытаемся преобразовать в проект WinJS в качестве родного приложения для Windows Store. В большинстве случаев Javascript работает, за исключением DOM manipulations deemed unsafe.Windows Store Приложение WinJS - как передать строку запроса, параметры хэша для начала страницы

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

например. index.html? contextId = xxxxx # enviroment = xxxxx

Я попытался настроить значение в package.appxmanifest безрезультатно. Он будет вызывать ошибки в строках запросов, а параметры хэша будут молча сохраняться.

UPDATE: фон проекта

Кратко о том, что делает наше приложение, а затем почему над наивным желанием работать не будет и ответ ниже, как мы пошли по этому вопросу.

Наше веб-приложение - это высокодинамичное приложение, управляемое данными, которое полностью полагается на данные, чтобы выяснить, что делать. Поэтому параметр? ContextId = xxxxx настолько важен, что он сообщает нашей системе загружать данные, которые далее информируют о том, какие визуальные компоненты загружаются, и они рекурсивно решают, чтобы сформировать совершенно разные пользовательские интерфейсы.

Поэтому мы искали, чтобы найти некоторые средства для подачи этих параметров, таких как традиционные параметры командной строки, в один и тот же исполняемый файл для создания разных пользовательских интерфейсов. И, таким образом, различные «приложения» просто меняются в этих параметрах. Подобно механизму «config transform» для web.config в веб-проектах ASP.NET, это было бы очень желанным.

Однако дальнейшие испытания показали, что это невозможно; один проект приложения для магазина Windows имеет GUID, который поставляется в пакетный пакет приложений. Построение одного и того же проекта несколько раз с использованием другой «конфигурации сборки» означало бы переписывание предыдущей установки, поскольку они являются тем же приложением с увеличением номеров версий. Ответ детализирует, как мы это делали.

ответ

0

Первым шагом является преобразование нашего проекта в Windows (8.1) в структуру универсального приложения, которое затем будет отделяться от отдельного проекта Windows Phone WinJS (это приятно, когда мы хотим настроить таргетинг на Windows Phone позже) и общий проект.

Практически все из проекта Windows Store перемещается в общий проект (включая default.html или index.html). Что остается в проекте Windows Store является настраиваемым config.js, несущего параметры

window.customWin8 = { 
    contextId: xxxxxxxxxx, 
    customParam: 'xxxxxxxxxx' 
}; 

Вниз по течению модулей, воспринимающие для строки запроса/параметры хэша затем возвратиться к этому альтернативному объекту, если он существует, чтобы забрать данные это необходимо.

Теперь для каждого разного приложения, которое мы хотим развернуть, на данный момент, похоже, потребуется отдельный проект для Windows Store, поэтому он получает свой собственный GUID и не будет конфликтовать с другими приложениями. Все эти проекты будут ссылаться на тот же общий проект благодаря универсальной структуре Visual Studio. Единственная нижняя сторона заключается в том, что Visual Studio 2013 не имеет прямого метода пользовательского интерфейса, чтобы сделать это ссылкой на проект совместного использования и должен быть ручной код в файле jsproj.

<Import Project="..\Common.Shared\Common.Shared.projitems" Label="Shared" /> 

С помощью этой регулировки они могут все строить и упаковывать с помощью изолированной «конфигурации сборки».

0

Приложения Windows Store не работают с параметрами URI при запуске с их основной плитки. В этом случае вы должны убедиться, что приложение по умолчанию соответствует подходящим значениям, например, если вы подумывали предоставить значения по умолчанию в манифесте, а затем по умолчанию используются в обработчике активации приложения для случая ActivationKind.launch, когда eventObject.detail.arguments пусто.

Есть два способа запуска приложения, которое может предоставить другие аргументы.

Первый запуск - через дополнительную плитку. Когда вы создаете плитку из приложения (которое зависит от пользователя), вы предоставляете аргументы запуска. В вашем обработчике активации для ActivationKind.launch эти аргументы будут находиться в свойстве eventObject.detail.arguments.

Во-вторых, чтобы запустить приложение через ассоциацию URI. Для этого используется пользовательская схема, объявленная в манифесте. Затем приложение увидит, что ActivationKind.protocol и eventObject.detail.uri будут содержать полный URI, включая любые параметры. Запуск URI можно сделать из другого приложения, введя URI в адресную строку браузера или через ярлык, который пользователь мог бы настроить на экране «Пуск».

+0

Проблема заключается в том, что в качестве веб-приложения для Javascript довольно часто обнаруживаются параметры из window.location. Теперь window.location не получает информацию, которую приложение ищет, это означает, что любая логика Javascript, которая использовалась, чтобы зависеть от этого, была нарушена. Несколько удивило, что Microsoft не рассматривала это и предлагала некоторую прокладку для обратной совместимости. Теперь это класс веб-приложений, которые не должны мигрировать в WinJS. – icelava

Смежные вопросы