通用Windows应用程序(UWP)未在Webview中加载本地html文件

时间:2016-11-02 01:12:49

标签: html windows webview uwp windows-10-universal

我从服务器下载了html内容,并将其存储在Windows存储文件夹(Windows.Storage.ApplicationData.Current.LocalFolder.Path)中。当我使用window.location.href =“ms-appdata:///local/inde.html”导航到该页面时,没有任何反应。当我使用webView.navigate(“ms-appdata:///local/index.html”)导航时,它会显示页面,但我的javascript都没有被执行。任何事情都会有所帮助。

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>

2 个答案:

答案 0 :(得分:0)

  

当我使用window.location.href =&#34; ms-appdata:///local/inde.html"导航到该页面时;没有任何反应。

问题是您使用的是UWP Web view,它是UWP中的一个封装控件,用于在应用程序中托管HTML内容。虽然它使用Microsoft Edge渲染引擎在为Windows 10编译的应用程序中显示HTML内容,但它有自己的Apis,例如这里用于加载内容。与传统浏览器不同,您无法使用window.location.href重定向浏览器的当前网址。

  

当我使用webView.navigate(&#34; ms-appdata:///local/index.html")进行导航时,它会显示该页面,但我的javascript都没有被执行。

当你想在WebView中调用JavaScript时,你需要调用InvokeScriptAsync method,在我上面链接的官方文档中有这样的示例。但是如果你的js代码应该自动执行,可能还有很多其他的可能导致它无法执行,请分享你的html,这样我们就能继续处理这个案例。

最后,我建议您阅读此博客:Ten Things You Need to Know About WebView

答案 1 :(得分:0)

window.location.href是JavaScript中使用的属性。但是ms-appdata是UWP应用程序中使用的URI方案。因此window.location.href无法与ms-appdata:///local/inde.html合作。要在WebView中加载本地html文件,我们应该使用 Navigate 方法,使用 Uri ,使用 ms-appdata scheme < / strong>喜欢你所做的。但在这里我们需要注意:

  

Remarks in WebView class

     

要从应用的 LocalFolder TemporaryFolder 数据存储中加载未压缩和未加密的内容,请使用 Navigate < / strong>使用 Uri ms-appdata scheme 的方法。 WebView 支持此计划需要将您的内容放在本地或临时文件夹下的子文件夹中。这样可以导航到URI,例如ms-appdata:/// local / folder / file.html 和ms-appdata:/// temp / folder / file.html

所以像@ tao的评论说你应该把你的html和js文件放在本地文件夹下的子文件夹中,然后用

之类的东西导航
webView.navigate("ms-appdata:///local/folder/index.html");