我正在編寫一個用戶腳本來從頁面中獲取圖像,並將其上傳到服務器。 該腳本在FF(Greasemonkey和Scriptish)中正常工作,但是當我使用Chrome(使用Tampermonkey或Ninjakit)時,它不會發送數據,而是發送字符串* [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編碼的實際圖像 - 當我讀取數據時 - 服務器獲取[對象對象]作爲POST正文(而不是數據正文,我無法獲取devtools網絡面板顯示由GM_xmlhttpRequest發出的請求,所以我在服務器端檢查了它)。
它看起來像改變的內容類型沒有任何影響。 將圖像直接放在數據字段中可以起到簡單的解決方法的作用,但一般情況下的問題仍然存在。 我將此標記爲已解決,即使我認爲問題仍在此處,也許chrome/tampermonkey背後的人需要處理它。 –