2016-11-02 1 views
0

У меня есть загрузка содержимого html с сервера и его хранение в папке хранения Windows (Windows.Storage.ApplicationData.Current.LocalFolder.Path). когда я перехожу к этой странице, используя window.location.href = "ms-appdata: ///local/inde.html" ничего не происходит. Когда я перемещаюсь с помощью webView.navigate ("ms-appdata: ///local/index.html"), он показывает страницу, но ни один из моих javascript не выполняется. Все будет полезно.Универсальное приложение Windows (UWP) Не загружает локальный файл html в Webview

var app = { 
 
    // Application Constructor 
 
    initialize: function() { 
 
     this.bindEvents(); 
 
    }, 
 
    // Bind Event Listeners 
 
    // 
 
    // Bind any events that are required on startup. Common events are: 
 
    // 'load', 'deviceready', 'offline', and 'online'. 
 
    bindEvents: function() { 
 
     document.addEventListener('deviceready', this.onDeviceReady, false); 
 
    }, 
 
    // deviceready Event Handler 
 
    // 
 
    // The scope of 'this' is the event. In order to call the 'receivedEvent' 
 
    // function, we must explicitly call 'app.receivedEvent(...);' 
 
    onDeviceReady: function() { 
 
     app.receivedEvent('deviceready'); 
 
    }, 
 
    // Update DOM on a Received Event 
 
    receivedEvent: function (id) { 
 
     var plugin = new RuntimeComponent.Class; 
 
     plugin.InitializeApp().then(function (response) { 
 
      try{ 
 
       (new Windows.UI.Popups.MessageDialog(response, "Title")).showAsync() 
 
      }catch(e){ 
 

 
      } 
 
     }); 
 
     
 
    } 
 
}; 
 
app.initialize();
<html> 
 
    <head> 
 
     <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *"> 
 
     <meta name="format-detection" content="telephone=no"> 
 
     <meta name="msapplication-tap-highlight" content="no"> 
 
     <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width"> 
 
     <link rel="stylesheet" type="text/css" href="css/index.css"> 
 
     <title>Hello World</title> 
 
    </head> 
 
    <body> 
 
     <script type="text/javascript" src="cordova.js"></script> 
 
     <script type="text/javascript" src="js/index.js"></script> 
 
    </body> 
 
</html>

+0

Вы должны разместить HTML в папке под местной папка. таких как 'ms-appdata: /// local/folder/file.html'. – tao

+0

@Tao: Да, у меня уже есть html внутри папки. Только для справки я упоминал как прямой файл. –

ответ

0

, когда я перейти на эту страницу не используя window.location.href = "MS-AppData: ///local/inde.html" ничего не происходит.

Проблема заключается в том, что вы используете UWP Web view, который является инкапсулированным элементом управления в UWP, в котором размещается HTML-контент в приложении. Хотя он использует механизм рендеринга Microsoft Edge для отображения содержимого HTML в приложениях, скомпилированных для Windows 10, он имеет свой собственный Apis, например, для загрузки содержимого. Не как обычный браузер, вы не можете использовать window.location.href для перенаправления текущего местоположения URL-адреса браузера.

Когда я навигация через webView.navigate («мс-AppData: ///local/index.html») он показывает страницу, но ни один из моих JavaScript не становится казнены.

Если вы хотите вызвать JavaScript внутри WebView, вам нужно будет позвонить в InvokeScriptAsync method, есть образцы для этого в официальном документе я связан выше. Но если ваш js-код должен быть выполнен автоматически, может быть много других возможностей, которые могли бы привести к его невозможности выполнить, пожалуйста, поделитесь своим html, чтобы мы продолжали работать над этим случаем.

Наконец, я рекомендую вам прочитать этот блог: Ten Things You Need to Know About WebView.

+0

«index.html» вызывает метод компонента win runtime, чтобы получить некоторые настройки. Если я добавлю этот index.html внутри моего пакета как часть проекта, он работает хорошо. Но если я помещаю тот же index.thml в «ms-appdata: ///local/index.html», мой компонент компонента времени выполнения не вызывается. Также я добавил свой код html и javascript в своем исходном вопросе выше FYR –

+0

@ManojKumar, мы много обсуждали о вашем случае, почему ваша ссылка html? Если это стандартное приложение UWP, ссылка на кордову здесь не должна работать, и WinRT api в вашем js-коде также не должен работать в 'WebView'. Для стандартного UWP, как цитируется @ZORRO, «поддержка WebView для этой схемы требует размещения вашего контента в подпапке в локальной или временной папке». Но мы смущаемся по поводу проблем, о которых я упоминал здесь, является ли возможность поделиться вашим образцом? Нам так любопытно узнать, как вы заработаете, многие thx! –

+0

@Greg Ниже приведена ссылка на пример кода. Я думаю, это объяснит вам, чего я пытаюсь достичь. В основном я хочу, чтобы «ms-appdata: ///local/folder/index.html» получал доступ к моим методам RunTimeComponent. https://www.dropbox.com/s/4yiac5sqmokmmw5/CordovaSample.zip?dl=0 –

0

window.location.href - это свойство, используемое в JavaScript. Однако ms-appdata - это схема URI, используемая в приложениях UWP. Таким образом, window.location.href не будет работать с ms-appdata:///local/inde.html. Для того, чтобы загрузить локальный файл HTML в WebView, мы должны использовать Navigate метод с Uri, который использует ms-appdata scheme как то, что вы сделали. Но здесь необходимо отметить, что:

Remarks in WebView class:

Для загрузки несжатый и незашифрованный контента из вашего приложения LocalFolder или TemporaryFolder данных магазинов, uuse Navigate метода с Uri, который использует ms-appdata scheme. WebView поддержка для этой схемы требует:: размещайте ваш контент в подпапках в локальной или временной папке. Это позволяет осуществлять навигацию по URI, например ms-appdata: /// local/folder/file.html и ms-appdata: /// temp/folder/file.html.

Так как @ комментарий Тао сказал, что вы должны поместить HTML и JS файлы в папке под локальную папку, а затем перемещаться, используя что-то вроде

webView.navigate("ms-appdata:///local/folder/index.html"); 
Смежные вопросы