ApplicationContentUriRules中存在检查URL

时间:2014-09-23 18:36:07

标签: winjs win-universal-app

我有一个将URL加载到WebView(x-ms-webview)的应用程序。当用户发出请求时,我想将他们尝试加载的网址与"白名单" ApplicationContentUriRules中的URL,如果它不存在则发出警告。我有什么想法可以实现这个目标吗?

1 个答案:

答案 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,但您还需要确保“类型”是“包含”而不是“排除”。