我有一个将URL加载到WebView(x-ms-webview)的应用程序。当用户发出请求时,我想将他们尝试加载的网址与"白名单" ApplicationContentUriRules中的URL,如果它不存在则发出警告。我有什么想法可以实现这个目标吗?
答案 0 :(得分:1)
没有用于从清单中提取信息的直接API,但有选项。
首先,您可以在代码中维护这些相同URI的数组,因为要更改它们,您必须更改清单并更新程序包,因此您需要更新数组以匹配。这样可以轻松检查,但可以增加代码维护。
这样的数组还可以让你创建一个用户界面,用户只能在其中输入可用的URI,例如:您可以从下拉列表中提供可能性,而不是让用户输入任何内容。
其次,您可以直接将清单XML读入文档并通过它解析以获取规则。以下是一些可以执行此操作的代码:
var uri = new Windows.Foundation.Uri("ms-appx:///appxmanifest.xml");
var doc;
Windows.Storage.StorageFile.getFileFromApplicationUriAsync(uri).then(function (file) {
return Windows.Storage.FileIO.readTextAsync(file);
}).done(function (text) {
doc = new Windows.Data.Xml.Dom.XmlDocument();
doc.loadXml(text);
var acur = doc.getElementsByTagName("ApplicationContentUriRules");
if (acur !== null) {
var rules = acur[0].getElementsByTagName("Rule");
for (var i = 0; i < rules.length; i++) {
console.log(rules[i].getAttribute("Match") + " - " + rules[i].getAttribute("Type"));
}
}
});
您可能只是直接从根文档中获取“Rule”标记,因为我认为清单中的任何其他内容都不使用这种节点,但为了面向未来,最好先获取ApplicationContentUriRules。如您所见,“匹配”属性保存该规则的URI,但您还需要确保“类型”是“包含”而不是“排除”。