您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
A simple implementation of AnkiConnect client, with TypeScript typing (using // @ts-check in an IME.)
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/452285/1099556/ankiconnect.js
- class AnkiConnect {
- baseURL;
- version;
- constructor(baseURL = 'http://localhost:8765', version = 6) {
- this.baseURL = baseURL;
- this.version = version;
- }
- async send(action, params, version = this.version) {
- return new Promise((resolve, reject) => {
- const xhr = new XMLHttpRequest();
- xhr.addEventListener('error', () => reject('failed to issue request'));
- xhr.addEventListener('load', () => {
- try {
- const response = JSON.parse(xhr.responseText);
- if (Object.getOwnPropertyNames(response).length != 2) {
- throw 'response has an unexpected number of fields';
- }
- if (!response.hasOwnProperty('error')) {
- throw 'response is missing required error field';
- }
- if (!response.hasOwnProperty('result')) {
- throw 'response is missing required result field';
- }
- if (response.error) {
- throw response.error;
- }
- resolve(response.result);
- } catch (e) {
- reject(e);
- }
- });
- xhr.open('POST', this.baseURL);
- xhr.send(JSON.stringify({ action, version, params }));
- });
- }
- chain(action, params, version = this.version) {
- const actions = [{ action, params }];
- const chainable = {
- commit: async () => {
- if (actions.length > 1) {
- return this.send('multi', { actions }, version);
- }
- return this.send(action, params, version);
- },
- add: async (action, params) => {
- actions.push({ action, params });
- return chainable;
- },
- };
- return chainable;
- }
- }