我正在使用 webview 在我的 Windows 8 应用程序中显示某些数据。我想使用本地 js 文件的包含以及使用本地存储的图像。
这可能吗?
将文件所在的本地路径放在我没有任何运气。
我正在使用 webview 在我的 Windows 8 应用程序中显示某些数据。我想使用本地 js 文件的包含以及使用本地存储的图像。
这可能吗?
将文件所在的本地路径放在我没有任何运气。
根据WebView
文档,您只能使用该ms-appx-web
协议引用其他文件,即加载存储在 中的文件Windows.ApplicationModel.Package.Current.InstalledLocation
,这意味着它们需要与您的应用程序一起作为内容分发。出于安全原因,该控件不支持ms-appdata
协议,即,如果您在运行时生成或下载它们,您无法打开存储的文件Windows.Storage.ApplicationData.Current.LocalFolder
Windows.Storage.ApplicationData.Current.RemoteFolder
或Windows.Storage.ApplicationData.Current.TempFolder
您需要放置它们的位置。
JavaScript 应用程序WebView
更灵活一点:它也支持ms-appdata
协议,但仅适用于图像等媒体文件。它无法打开任何潜在的可执行代码,例如脚本或 CSS。
如果要打开一些本地 .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);
而且我可以很容易地打开这个 .html 文件,有或没有FileOpenPicker
:
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:///
如果 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;
}
}
}
我希望这能为您指明正确的方向!