Как сделать панель приложения поверх iFrame? - PullRequest
2 голосов
/ 20 декабря 2011

Я играю с некоторыми вещами в Windows 8 и удивляюсь, как я могу сделать следующее в приложении для Windows 8.

  1. Отображение веб-страницы.
  2. Реализация приложения в стиле metroпанель над веб-страницей.

Вот мой default.html:

<body role="application">
<div style="z-index:2;">
    <div id="standardAppBar" data-win-control="WinJS.UI.AppBar" disabled="false" aria-label="Command Bar"
        data-win-options="{position:'bottom',transient:true,autoHide:0,lightDismiss:true}" >
        <div class="win-right">
            <button onclick="sdkSample.displayStatus('Add button pressed')" class="win-command">
                <span class="win-commandicon win-large iconAdd"></span>
                <span class="win-label">Add to Menu_1</span>
            </button>
        </div>
    </div>
</div>
<div style="z-index:0;">
    <div data-win-control="WinJS.UI.ViewBox">
        <div>
            <!-- taking Apple.com as an example -->
            <iframe class="fullscreen" src="http://apple.com" />
        </div>
    </div>
</div>
</body>

А вот мой CSS для «полноэкранного» * ​​1012 *

.fullscreen {
display:block;
position:fixed;
top:0;
left:0;
width:100%;
height:80%; /* leave 20% white space to right click to toggle App Bar */
}

Обычно панель приложения может бытьпереключается по правому клику.Но в приведенном выше коде щелчок правой кнопкой мыши на iFrame не работает.Поэтому мне пришлось оставить 20% пустого пространства, чтобы щелкнуть по нему, чтобы переключить пустое пространство.Но я действительно хочу, чтобы это было полноэкранным.Кто-нибудь?Большое спасибо.

Примечание. Если вы работаете на сенсорном устройстве, панель приложений можно переключать, проводя пальцем от внешней стороны экрана к внутренней части экрана.Так что это работает просто отлично.Но не для щелчка правой кнопкой мыши.Таким образом, этот пост задает опцию правой кнопки мыши.Заранее большое спасибо.

Ответы [ 2 ]

1 голос
/ 17 января 2012

Ответ от сотрудников Microsoft .. Перепост здесь ...

Идея заключается в добавлении div над iframe. Необходимо убедиться, что div имеет прозрачный фон, и div находится "над" iframe.

http://social.msdn.microsoft.com/Forums/en-US/winappswithhtml5/thread/45f947c5-ee79-4eed-8bb3-6352e89c8c05

0 голосов
/ 11 января 2012

Щелкните правой кнопкой мыши на 20% пространства, которое вы оставили в нижней части страницы. Держу пари, что появится панель приложения. Когда вы проводили пальцем внизу, вы касались родительской страницы, чтобы появилась панель приложений, но когда вы щелкаете правой кнопкой мыши в фрейме, щелчок правой кнопкой мыши не обнаруживается как событие на родительской странице, поэтому панель приложений не появляется.

В этих сценариях вам придется использовать навигацию по фрагментам, а не навигацию по фрейму, которую вы использовали.

EDIT:
Предположим, что html находится в теге body файла default.html.
"contentHost" div будет там, где вы загрузите свои страницы (даже начальную страницу)
Панель приложений также будет присутствовать на этой странице.

<div id="contentHost">

</div>
<div id="trafficTipsAppBar" data-win-control="WinJS.UI.AppBar" data-win-options="{position:'bottom',transient:true,autoHide:0,lightDismiss:true}">
    <div class="win-right">
        <button class="win-command" id="settingsButton">
            <span style="background-image: url('images/smalllogo.png')" class="win-commandicon"></span>
            <span class="win-label">Settings</span>
        </button>
    </div>
</div>

Файл default.js будет выглядеть следующим образом.
Вы можете использовать «навигацию» как есть.
Также включите эту строку WinJS.Navigation.addEventListener ('Navigation', Navigation);
Вы заметите, что WinJS.Application.onmainwindowactivation мы перемещаемся к фрагменту "main.html" , это начальная загрузка. Вы можете создать это, используя «Добавить новый элемент»> Фрагмент.
Кроме того, когда мы нажимаем кнопку «настройки» на панели приложений, мы переходим к «settings.html» фрагмент

(function () {
'use strict';
// Uncomment the following line to enable first chance exceptions.
// Debug.enableFirstChanceException(true);

document.addEventListener("DOMContentLoaded", function () {
    WinJS.UI.processAll();
}, false);

WinJS.Application.onmainwindowactivated = function (e) {
    if (e.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.launch) {
        WinJS.Navigation.navigate('main.html');

        var settingsButton = document.getElementById('settingsButton');
        settingsButton.addEventListener('click', function () {
            WinJS.Navigation.navigate('settings.html');
        });
    }
}

function navigated(e) {
    WinJS.UI.Fragments.clone(e.detail.location, e.detail.state)
        .then(function (frag) {
        var host = document.getElementById('contentHost');
        host.innerHTML = '';
        host.appendChild(frag);
        document.body.focus();

        WinJS.Application.queueEvent({
            type: 'fragmentappended',
            location: e.detail.location,
            fragment: host,
            state : e.detail.state
            });

    });
}

WinJS.Navigation.addEventListener('navigated', navigated);
WinJS.Application.start();
})();    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...