locked
Открытие локальной страницы html в окне браузера, а не самого приложения RRS feed

  • Вопрос

  • Если открыть внешнюю ссылку типа <a href="http://mysite.reg>Внешняя ссылка</a> в JS-приложении магазина, то ссылка откроется не в самом приложении, а в окне браузера, о чем и сказано в мануале.

    Собственно вопрос: а как точно так же (не в самом приложении, а в окне браузера) открыть локальную ссылку? (в любом ли месте может быть такая ссылка?)

    13 мая 2013 г. 15:13

Ответы

  • Уф-уф. Нашли добрые люди!

    Метод Launcher.LaunchFileAsync работает - то что надо!

    Если страница в пакете приложения, то можно так сделать:

    Windows.ApplicationModel.Package.current.installedLocation.getFileAsync("index.html").then(
                function (file) {
                    var opt = new Windows.System.LauncherOptions()
                    Windows.System.Launcher.launchFileAsync(file, opt).done(
                        function (arg) {
                         }
                    )
                }
                )

    Если еще где, то просто используем FileOpenPicker

    var opener = new Windows.Storage.Pickers.FileOpenPicker()
                 opener.fileTypeFilter.append("*")
                 opener.pickSingleFileAsync().then(function(picked){
                     if(picked){

    • Помечено в качестве ответа chingachgoog 14 мая 2013 г. 14:26
    14 мая 2013 г. 14:26

Все ответы

  • Здравствуйте,

    Посмотрите эту тему: Open local html file in current window with Javascript , как там указанно, браузер не даст JS доступа к локальным файлам.


    14 мая 2013 г. 10:21
  • В той теме немного не о том. Там чувак совершил две ошибки:

    1) схема file: действительно не работает в приложениях магазина, однако абсолютный путь получить вполне реально и не сложно.

    2) Косяк с песочницами. Он хочет, чтобы браузер ОДНОВРЕМЕННО брал инфу из сети и из локального компа.

    В том же, что хочу сделать я нет ничего криминального. Во-первых приложение магазина открывает же браузер отдельно? Значит можно открыть отдельно и для локального контента. Во-вторых, лезть в сеть для него не надо.

    Возможно, это не решается так просто, как с ссылкой на сеть (хотя было бы логично). Я пробовал выбирать html FileOpenPicker-ом и брать путь через createObjectURL - для ссылки на html это не работает (хотя работает, например, для вставки картинки внутрь приложения). Может как-то можно через openAsync, но я не догоняю как (((

    14 мая 2013 г. 11:13
  • Ну здесь дело не в нелегальности действий, просто такова защита. Вы смотрели то, что в самом ответе дали как варианты решения?

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

    Вот можете посмотреть и эти темы, где выполняют похожие задачи:

    http://stackoverflow.com/questions/3582671/how-to-open-a-local-disk-file-with-javascript

    http://stackoverflow.com/questions/13156925/how-to-display-the-content-of-a-local-file-in-browser-using-java-script-code-t

    http://www.alecjacobson.com/weblog/?p=1645

    14 мая 2013 г. 13:11
  • Честно говоря, я не понимаю, в чем тут защита.

    Пользователь же может сам открыть браузер и открыть локальную html-страничку? Вроде тут все то же самое: пользователь сам открывает FileOpenPicker-ом файл, который нужно открыть. Это я все делал. Например, таким образом можно встроить картинку в страничку приложения. Т.е. путь к файлу находится верно. (но видимо это работает только для картинок, звука и видео - т.к. при <a> с href = адресу html-странички ВООБЩЕ НИЧЕГО не происход - даже никаких ошибок нет)

    Таким же образом можно получить путь к локальной html-страничке. (а можно вообще положить ее в ресурсы приложения и путь к ней будет относительный а-ля ms-appx). Но что с ней делать дальше - не понимаю (как использовать openAsync? И его ли надо?).

    Вообще выходит две задачи, на самом деле:

    1) Открыть штатный по умолчанию браузер

    2) Сделать так, чтобы браузер открыл локальную страницу.

    PS

    Вариант загрузить на сервер и скачать обратно - не вариант. Т.к. в том и фишка, чтобы была возможность работать без сети.

    14 мая 2013 г. 13:42
  • Уф-уф. Нашли добрые люди!

    Метод Launcher.LaunchFileAsync работает - то что надо!

    Если страница в пакете приложения, то можно так сделать:

    Windows.ApplicationModel.Package.current.installedLocation.getFileAsync("index.html").then(
                function (file) {
                    var opt = new Windows.System.LauncherOptions()
                    Windows.System.Launcher.launchFileAsync(file, opt).done(
                        function (arg) {
                         }
                    )
                }
                )

    Если еще где, то просто используем FileOpenPicker

    var opener = new Windows.Storage.Pickers.FileOpenPicker()
                 opener.fileTypeFilter.append("*")
                 opener.pickSingleFileAsync().then(function(picked){
                     if(picked){

    • Помечено в качестве ответа chingachgoog 14 мая 2013 г. 14:26
    14 мая 2013 г. 14:26