在Windows 8应用程序中加载需要基本身份验证的网页

时间:2015-05-07 22:16:39

标签: iframe windows-8 windows-8.1 winjs

如何在Windows 8 HTML / JavaScript应用中加载需要基本身份验证的外部网站?

我发现您无法使用http://username:password@host/形式的网址。

1 个答案:

答案 0 :(得分:1)

为了加载我尝试加载的URL,我必须使用webview或x-ms-webview并调用它的navigateWithHttpRequestMessage函数才能传递基本身份验证标头。< / p>

这导致了以下代码结构:

function ready(element, options) {
    var webview = document.querySelector('[data-hook~="camera"]');

    webview.navigateWithHttpRequestMessage(buildRequest());
}

function buildRequest() {
    var username = 'username',
        password = 'password',
        Crypto = Windows.Security.Cryptography,
        Http = Windows.Web.Http,
        request,
        buffer,
        token;

    request = new Http.HttpRequestMessage(
        Http.HttpMethod.get,
        new Windows.Foundation.Uri('http://ipcamera/'));

    buffer = Crypto.CryptographicBuffer.convertStringToBinary(
        [username, password].join(':'),
        Crypto.BinaryStringEncoding.utf8);
    token = Crypto.CryptographicBuffer.encodeToBase64String(buffer);

    request.headers.authorization = new Http.Headers.HttpCredentialsHeaderValue('basic', token);

    return request;
}

需要注意的是,没有任何DOM就绪事件似乎会触发,因此如果您需要与外部网站进行交互,则必须使用计时器。