2014-02-05 8 views
2

Я хотел бы создать мобильное приложение Windows 8, чтобы быть контейнером для других веб-приложений. Я имею в виду, что это приложение будет загружать с моих серверных пакетов HTML, CSS & Javascript, сохранить его в базе данных, и пользователь может открыть эти загруженные приложения. Он работает для Android и iOS, но для Win8 нет.Windows 8 App - контейнер для html-страниц

Загрузка и сохранение в базе данных. Для того, чтобы открыть скаченный приложение I создать временную папку, сохранить все файлы там и создать ссылку

<a href="file://path_to_index.html">Open</a> 

Но ссылка не открывается. Я полагаю, что политика безопасности Windows не позволяет открывать локальные ссылки в мобильных приложениях.

У вас есть решение этой или любой идеи альтернативного подхода?

EDIT:

Я пытался файлы записи в локальном хранилище и открыть его в MS-WebView согласно jakerella, но он не работает. Функция webview.navigate ('мс-AppData: ///local/index.html') бросает исключение: неправильный аргумент

Javascript:

$(function() { 
    $('#my_button').click(function() { 
     var HTML_CONTENT = '<!DOCTYPE html> <html> <head> <title></title> </head> <body> <button id="btn">Click me!</button> <div id="content"></div> <script type="text/javascript" src="index.js"></script> </body> </html>'; 
     var JS_CONTENT = 'document.getElementById("btn").onclick=function(){var a=document.getElementById("content");a.innerHTML="Clicked!"};'; 

     var localFolder = Windows.Storage.ApplicationData.current.localFolder; 
     localFolder.createFileAsync("index.html", Windows.Storage.CreationCollisionOption.replaceExisting).then(function (file) { 
      Windows.Storage.FileIO.writeTextAsync(file, HTML_CONTENT).then(function() { 
       localFolder.createFileAsync("index.js", Windows.Storage.CreationCollisionOption.replaceExisting).then(function (file2) { 
        Windows.Storage.FileIO.writeTextAsync(file2, JS_CONTENT).then(function() { 
         try { 
          var wv = $('#wv')[0]; 
          wv.navigate('ms-appdata:///local/index.html'); 
         } catch (e) { 
          console.log(e.message); 
         } 
        }); 
       }); 
      }); 
     }); 
    }); 
}); 

И HTML:

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8" /> 
    <title>App1</title> 

    <!-- WinJS references --> 
    <link href="//Microsoft.WinJS.2.0/css/ui-dark.css" rel="stylesheet" /> 
    <script src="//Microsoft.WinJS.2.0/js/base.js"></script> 
    <script src="//Microsoft.WinJS.2.0/js/ui.js"></script> 
    <script src="js/jquery-2.1.0.min.js"></script> 
    <script src="js/script.js"></script> 

    <!-- App1 references --> 
    <link href="/css/default.css" rel="stylesheet" /> 
    <script src="/js/default.js"></script> 
</head> 
<body> 
    <button id="my_button">Open page</button> 
    <x-ms-webview id="wv"> 

    </x-ms-webview> 
</body> 
</html> 

EDIT2:

ОК, он работает! Я нашел решение здесь: http://blogs.windows.com/windows/b/appbuilder/archive/2013/10/01/blending-apps-and-sites-with-the-html-x-ms-webview.aspx

+0

Ну, это зависит от того, как вы хотите «открыть» загруженный файл ... Это [страница документации] (http://msdn.microsoft.com/en-us/library/windows/apps/hh781229.aspx) говорит о загрузке локальных ресурсов, но та же идея может быть применена к ссылкам, то есть вы используете протоколы 'ms-appx' или' ms-appx-web'. Что вы хотите, когда пользователь нажимает на ссылку? – jakerella

+0

Когда я нажимаю на ссылку, я хочу, чтобы страница была открыта – luski

+0

Ух ... где? Как? Внешний браузер? В 'ms-webview'? Существует множество способов загрузки html-файла. – jakerella

ответ

0

Как я вижу, у вас есть два подхода.

Один из них использует x-ms-webview, который является тем, что вы нашли.
Другой будет устанавливать html прямо в элемент по коду, используя execUnsafeLocalFunction, который не рекомендуется MS, но я думаю, вы могли бы сделать из этого ответственное использование.

+0

Используя execUnsafeLocationFunction, вы можете задать вопрос, действительно ли вы доверяете исходному коду. Если это то, что вы создаете сами, тогда все в порядке. С другой стороны, если вы загружаетесь из какого-либо произвольного места в Интернете, возможно, нет - тогда вы должны использовать Webview или другой контейнер. –