现在能在这个站用了
// ==UserScript==
// @name NodeSeek 编辑器增强
// @namespace https://www.nodeseek.com/
// @version 0.0.12
// @description 为 NodeSeek 编辑器增加图片上传功能
// @author TomyJan
// @match *://www.nodeseek.com/*
// @match *://www.deepflood.com/*
// @icon https://www.nodeseek.com/static/image/favicon/android-chrome-192x192.png
// @grant GM_xmlhttpRequest
// @license MPL-2.0 License
// @supportURL https://www.nodeseek.com/post-74493-1
// @homepageURL https://www.nodeseek.com/post-74493-1
// @downloadURL https://update.greasyfork.org/scripts/487553/NodeSeek%20%E7%BC%96%E8%BE%91%E5%99%A8%E5%A2%9E%E5%BC%BA.user.js
// @updateURL https://update.greasyfork.org/scripts/487553/NodeSeek%20%E7%BC%96%E8%BE%91%E5%99%A8%E5%A2%9E%E5%BC%BA.meta.js
// ==/UserScript==
(function () {
'use strict';
const imgHost = {
url: "https://i.111666.best",
token: "填api"
};
const submitByKey = true;
window.addEventListener('load', initEditorEnhancer, false);
function initEditorEnhancer() {
document.addEventListener('paste', handlePasteEvt);
const dropZone = document.getElementById('code-mirror-editor');
dropZone.addEventListener('dragover', e => {
e.preventDefault();
e.stopPropagation();
e.dataTransfer.dropEffect = 'copy';
});
dropZone.addEventListener('drop', e => {
e.preventDefault();
e.stopPropagation();
let files = Array.from(e.dataTransfer.files).filter(f => f.type.startsWith('image/'));
if (files.length) uploadImage(files);
else log('未检测到图片文件', 'red');
});
// 图片按钮
let checkExist = setInterval(() => {
const oldBtn = document.querySelector('.toolbar-item.i-icon-pic[title="图片"]');
if (oldBtn) {
clearInterval(checkExist);
const newBtn = oldBtn.cloneNode(true);
oldBtn.parentNode.replaceChild(newBtn, oldBtn);
newBtn.addEventListener('click', handleImgBtnClick);
}
}, 200);
if (submitByKey) {
document.addEventListener('keydown', e => {
if (e.ctrlKey && e.key === 'Enter') {
document.querySelector('.submit.btn').click();
}
});
}
}
function handlePasteEvt(event) {
const items = (event.clipboardData || event.originalEvent.clipboardData).files;
const images = Array.from(items).filter(f => f.type.startsWith('image/'));
if (images.length) uploadImage(images);
else log('粘贴内容中未包含图片', 'red');
}
function handleImgBtnClick() {
const input = document.createElement('input');
input.type = 'file';
input.multiple = true;
input.accept = 'image/*';
input.onchange = e => {
const files = Array.from(e.target.files).filter(f => f.type.startsWith('image/'));
if (files.length) uploadImage(files);
};
input.click();
}
async function uploadImage(files) {
for (let i = 0; i < files.length; i++) {
log(`上传第 ${i + 1}/${files.length} 张...`);
await uploadTo111666(files[i]);
}
}
function uploadTo111666(file) {
return new Promise((resolve, reject) => {
const formData = new FormData();
formData.append('image', file);
const headers = imgHost.token ? { 'Auth-Token': imgHost.token } : {};
GM_xmlhttpRequest({
method: 'POST',
url: `${imgHost.url}/image`,
headers,
data: formData,
onload: rsp => {
if (rsp.status !== 200) {
log(`上传失败: ${rsp.status}`, 'red');
return reject();
}
let json;
try { json = JSON.parse(rsp.responseText); } catch { json = null; }
if (json && json.ok && json.src) {
const url = imgHost.url + json.src;
insertToEditor(``);
log('上传完成');
resolve();
} else {
log('上传接口返回异常', 'red');
reject();
}
},
onerror: () => { log('网络错误', 'red'); reject(); }
});
});
}
function insertToEditor(md) {
const cmEl = document.querySelector('.CodeMirror');
if (cmEl && cmEl.CodeMirror) {
const cm = cmEl.CodeMirror;
cm.replaceRange(`\n${md}\n`, cm.getCursor());
}
}
function log(msg, color='') {
if (!document.getElementById('editor-enhance-logs')) initLogDiv();
const div = document.getElementById('editor-enhance-logs');
div.innerHTML = `<div${color?` style="color:${color}"`:''}> ${msg}</div>`;
console.log(`[NodeSeek] ${msg}`);
}
function initLogDiv() {
const logDiv = document.createElement('div'); logDiv.id='editor-enhance-logs';
document.body.appendChild(logDiv);
const toolbar = document.querySelector('.mde-toolbar');
toolbar && toolbar.appendChild(logDiv);
}
})();
好用
网络错误
怎么使用呢
@zdq #2

@mumo888 #3 填api,然后复制进油猴
.
为啥酒神不直接集成了呀!
支持下,可惜我的是TG图床,没法使用
我用的这个,直接加上一行就行了。
好用爱用,感谢分享。