Widget:萌百条目:修订间差异
跳到导航
跳到搜索
无编辑摘要
imported>Irukaza 无编辑摘要 |
imported>Irukaza 无编辑摘要 |
||
第2行: | 第2行: | ||
<includeonly> | <includeonly> | ||
<script> | <script> | ||
/** | |||
url | * @typedef {object} JsonpConfig | ||
* @property {string} url | |||
* @property {Record<string, Any>} params | |||
*/ | |||
const jsonp = (() => { | |||
let incrementCallbackKey = 0 | |||
/** | |||
* @param {JsonpConfig} config | |||
*/ | |||
return function jsonp(config) { | |||
return new Promise((resolve, reject) => { | |||
const scriptTag = document.createElement('script') | |||
const requestUrl = config.url + '?' + new URLSearchParams({ | |||
...config.params, | |||
callback: '___jsonpCallback' + ++incrementCallbackKey, | |||
}).toString() | |||
scriptTag.src = requestUrl | |||
window['___jsonpCallback' + incrementCallbackKey] = resolve | |||
scriptTag.onload = () => scriptTag.remove() | |||
scriptTag.onerror = () => reject(new Error('jsonp request error')) | |||
document.body.appendChild(scriptTag) | |||
setTimeout(() => reject(new Error('jsonp request timeout')), 15_000) | |||
}) | |||
} | |||
})() | |||
jsonp({ | |||
url: 'https://zh.moegirl.org/api.php', | |||
params: { | |||
action: 'parse', | |||
format: 'json', | |||
page: mw.config.get('wgPageName') | |||
} | } | ||
}) | }) | ||
.then(data => | .then(data => { | ||
if (data.error) { | |||
throw new Error(data.error.info) | |||
} else { | |||
document.body.querySelector('moe').innerHTML = data.parse.text['*'] | |||
} | |||
}) | |||
.catch(err => { | |||
}) | |||
</script> | </script> | ||
<style> | <style> |