페이지에서 이미지를 가져 와서 서버에 업로드하는 사용자 스크립트를 작성하고 있습니다. FF (Greasemonkey 및 Scriptish)에서는 스크립트가 정상적으로 작동하지만 Tampermonkey 또는 Ninjakit을 사용하여 Chrome을 사용하면 데이터를 보내지 않고 * [object Object] * 문자열을 전송합니다.GM_xmlhttpRequest를 사용하여 Chrome에서 데이터를 POST 하시겠습니까?
// ==UserScript==
// @id myid
// @name myname
// @version 1.0
// @namespace ohadcn
// @author Ohad Cohen
// @description mydescription
// @include https://*
// @grant GM_xmlhttpRequest
// @require https://code.jquery.com/jquery-2.0.3.min.js
// @run-at document-end
// ==/UserScript==
function getBase64Image(img) {
var canvas = document.createElement("canvas");
canvas.width = img.width;
canvas.height = img.height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0);
var dataURL = canvas.toDataURL("image/png");
return dataURL.replace(/^data:image\/(png|jpg);base64,/, "");
}
img=$("img[alt=myImage]").get(0);
img.onload=function(){
var img64=getBase64Image(img)
var _data=new FormData();
_data.append("image64",img64);
GM_xmlhttpRequest({
method: "POST",
url: "http://myserver.org/mysscript.py",
headers: {
"Content-Type": "multipart/form-data"
},
data:_data,
onload: function(response) {
console.log ("gut response");
$("#input").get()[0].value=response.responseText;
}
});
}
Tampermonkey 및 Ninjakit 모두 요청을 보내려면 어떻게합니까 :
여기 내 스크립트입니다. Tampermonkey에서 Ninjakit에서 응답을 얻지 않습니다 (onload는 호출되지 않습니다).
그러나 실제로 데이터를 읽을 때 base64로 인코딩 된 실제 이미지를 보내지 않습니다. 서버가 [object Object]을 POST 본문으로 가져옵니다. 데이터 본문 대신 devtools 네트워크 패널을 가져올 수 없습니다. GM_xmlhttpRequest에 의해 만들어진 요청을 보여 주므로 서버 쪽에서 확인했다.)
는 효과가 없습니다. 이미지를 데이터 필드에 직접 넣는 것은 간단한 해결 방법으로 작동하지만 일반적인 경우에 대한 질문은 여기에 있습니다. 나는 이것을 해결 된 것으로 표시한다. 심지어 질문이 여전히 여기에 있다고 생각한다. 아마도 크롬/tampermonkey 뒤에있는 사람들이 그것에 대해 연구해야 할 것이다. –