Javascript 需要在网页上显示异步函数结果的帮助吗
我正在尝试将Spotify PKCE授权与Siri快捷方式一起使用。不幸的是,我找到的所有解决方案都不适用于我的具体情况。我有这段代码 我真的不知道我在做什么。基本上,我需要一个字符串的SHA256散列,但这需要字节和十六进制。然后需要对其进行base64Url编码。我已经尝试了堆栈上的大多数解决方案,但我似乎无法将最终产品输出到网页上,这是我能够在iPhone上本机运行Java脚本的主要方式。任何帮助都将不胜感激Javascript 需要在网页上显示异步函数结果的帮助吗,javascript,html,api,asynchronous,async-await,Javascript,Html,Api,Asynchronous,Async Await,我正在尝试将Spotify PKCE授权与Siri快捷方式一起使用。不幸的是,我找到的所有解决方案都不适用于我的具体情况。我有这段代码 我真的不知道我在做什么。基本上,我需要一个字符串的SHA256散列,但这需要字节和十六进制。然后需要对其进行base64Url编码。我已经尝试了堆栈上的大多数解决方案,但我似乎无法将最终产品输出到网页上,这是我能够在iPhone上本机运行Java脚本的主要方式。任何帮助都将不胜感激 <script> function sha256(plai
<script>
function sha256(plain) {
// returns promise ArrayBuffer
const encoder = new TextEncoder();
const data = encoder.encode(plain);
return window.crypto.subtle.digest('SHA-256', data);
}
function base64urlencode(a) {
// Convert the ArrayBuffer to string using Uint8 array.
// btoa takes chars from 0-255 and base64 encodes.
// Then convert the base64 encoded to base64url encoded.
// (replace + with -, replace / with _, trim trailing =)
return btoa(String.fromCharCode.apply(null, new Uint8Array(a)))
.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
}
async function pkce_challenge_from_verifier(v) {
hashed = await sha256(v);
base64encoded = base64urlencode(hashed);
return base64encoded;
}
const code = await pkce_challenge_from_verifier("Zg6klgrnixQJ629GsawRMV8MjWvwRAr-vyvP1MHnB6X8WKZN")
document.getElementById("value").innerHTML = code;
</script>
<body>
<p id="value"></p>
</body>
</html> ```
函数sha256(普通){
//返回承诺ArrayBuffer
const encoder=新的textcoder();
常量数据=编码器。编码(普通);
返回窗口.加密.隐蔽.摘要('SHA-256',数据);
}
函数base64urlencode(a){
//使用Uint8数组将ArrayBuffer转换为字符串。
//btoa接受0-255之间的字符,base64编码。
//然后将base64编码转换为base64url编码。
//(替换+为-,替换/替换为u,纵倾=)
返回btoa(String.fromCharCode.apply(null,新Uint8Array(a)))
.replace(//\+/g,'-')。replace(//\//g,'.''.')。replace(//=+$/,'');
}
来自校验器的异步函数pkce\u质询(v){
哈希=等待sha256(v);
base64encoded=base64urlencode(散列);
返回base64编码;
}
const code=等待来自验证者的pkce挑战(“Zg6klgrnixQJ629GsawRMV8MjWvwRAr-vyvP1MHnB6X8WKZN”)
document.getElementById(“value”).innerHTML=code;
```
await
不允许在全局级别使用,即只能在async
函数中使用await
。
那么如何解决呢?使用承诺而不是等待。像这样
来自验证者的pkce质询(“Zg6klgrnixQJ629GsawRMV8MjWvwRAr-vyvP1MHnB6X8WKZN”)
.then((代码)=>document.getElementById(“值”).innerHTML=code)
.catch((错误)=>console.error(错误))
同时放置
在body
结束标记之后,否则JS找不到p
元素。JS看起来不错。试着把js脚本放在你的标记之后的正文的末尾。谢谢你,这工作做得很好