当我使用navigatetostring时,我可以在webview中引用本地文件吗?

时间:2012-12-20 01:51:14

标签: c# .net xaml windows-runtime

我正在使用webview在我的Windows 8应用中显示某些数据。我想使用include到本地js文件以及使用本地存储的图像。

这可能吗?

通过放置文件所在的本地路径,我没有运气。

3 个答案:

答案 0 :(得分:9)

根据WebView documentation,您只能使用ms-appx-web协议引用其他文件,即加载Windows.ApplicationModel.Package.Current.InstalledLocation中存储的文件,这意味着需要分发这些文件作为内容以及您的应用程序。出于安全原因,该控件不支持ms-appdata协议,即您无法打开存储Windows.Storage.ApplicationData.Current.LocalFolder Windows.Storage.ApplicationData.Current.RemoteFolderWindows.Storage.ApplicationData.Current.TempFolder的文件,如果您需要将它们放在那里在运行时生成或下载它们。

在JavaScript应用中,WebView更多flexible:它也支持ms-appdata协议,但仅适用于图片等媒体文件。它无法打开任何可能的可执行代码,例如脚本或CSS。

答案 1 :(得分:1)

如果要打开某个本地.html文件或atc。您应该在 InstalledLocation 文件夹中下载它。如果您无法创建新文件,则可以使用file.CopyAsync(htmlFolder, fname + ".html");  例如,我创建了一些.html文件:

StorageFolder htmlFolder = await Windows.ApplicationModel.Package.Current.InstalledLocation.CreateFolderAsync(@"HtmlFiles", CreationCollisionOption.GenerateUniqueName);
IStorageFile file = await htmlFolder .CreateFileAsync(fname + ".html", CreationCollisionOption.GenerateUniqueName);

而且我可以轻松打开这个带有或不带FileOpenPicker的.html文件:

var fop = new FileOpenPicker();
fop.FileTypeFilter.Add(".html");
var file = await fop.PickSingleFileAsync();
if (file != null)
{
   string myPath = file.Path.Substring(file.Path.IndexOf("HtmlFiles"));
   myWebview.Navigate(new Uri("ms-appx-web:///" + myPath));
}

不要忘记 - 只能通过 InstalledLocation ,您可以使用ms-appx-web:///

打开它

答案 2 :(得分:0)

如果WebView是基于IE10的,那么FIleReader可能就是您要找的。下面是我在图像ipload页面上使用的一段代码,当通过“文件打开”对话框选择图像时,它们会在页面中显示图像:

$('input:file').each(function(index, evt){
    if(index===0)
    {
        var files = evt.files;
        for(var i=0;i<files.length;i++)
        {
            if(files[i].name===filename)
            {
                var reader = new FileReader();

                reader.onload=(function(theFile){
                    return function(e){
                        var line= uploader.fineUploader('getItemByFileId',id);
                        if(line!=undefined)
                            $(line).append('<img class="fileimage" id="fileImage-' + id + '" src="'+e.target.result+'" />');
                    };
                })(files[i]);
                reader.readAsDataURL(files[i]);
                break;
            }
        }
    }

我希望这能指出你正确的方向!