Щебетать программно Добавить фото

Я сделал обрезку экрана и загрузил дополнение для Firefox. Я хотел бы привести функцию, которая позволяет пользователю чирикать изображения.

Вручную (как это делает человек) процесс таков:Откройте twitter.com (если не вошли в систему, сообщите пользователю, чтобы войти)Нажмите "новый твит", это сделаноПрикрепите изображения, выполнив «Добавить фото» и перейдите к файлуЭто GIF этого процесса:Затем я фокусирую вкладку и фокусирую поле ввода твитаТаким образом, пользователь может напечатать сообщение, затем «чьи на фотографиях», если они хотят, а затем нажмите твит.Самое замечательное в этом методе - изображения не беспокоили твиттер-серверы, так как изображения не загружаются до тех пор, пока пользователи не окончательно не списывают, когда нажимают кнопку «Tweet». Таким образом, пользователь может решить нажать X, чтобы удалить прикрепленный скриншот, прежде чем нажать «Tweet». Я считаю этот способ очень дружественным для пользователя и серверов Twitter. (Если существует ограничение на размер файла, которое может быть прикреплено, проверьте это в моем аддоне и дайте пользователю знать, что оно не может войти)Эта проблема

Я пытаюсь автоматизировать шаги 1-4. Я могу сделать 1, 2 и 4 отлично.

Я пытаюсь программно выполнить шаг 3. Кажется, Twitter не используетinput[type=file].files HTML5 API, они делают некоторые пользовательские JavaScript. Кто-нибудь знает, как я могу программно добавлять изображения? У меня есть полный доступ к коду javascirpt, так как это дополнение к Firefox.

Одна большая причина, по которой я не могу сказать пользователю, что нужно прикреплять эти файлы, заключается в том, что эти изображения хранятся в памяти для повышения производительности, а не в файле, поэтому мне нужно прикрепить их программно.

Код, который я пробовал (HTML5 FileList API)

Он используетmozSetFileArray определяется здесь:https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement и его братmozSetFileNameArray Вот:https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/mozSetFileNameArray

// Step 1 - Open twitter.com (for testing purposes, twitter.com is open in tab 7 so I dont load it here)
var aContentWindow = gBrowser.tabContainer.childNodes[6].linkedBrowser.contentWindow; // gets window of tab 7
var aContentDocument = aContentWindow.document;

// Step 2 - Open tweet modal    
var btnNewTweet = aContentDocument.getElementById('global-new-tweet-button');
console.info('btnNewTweet:', btnNewTweet);

if (!btnNewTweet) {
    throw new Error('global tweet button not found, probably not logged in');
}

btnNewTweet.click();

// Step 3 - Attach two File instances for test purposes (in production will attach Blob)
var inputAddPhoto = aContentDocument.getElementById('global-tweet-dialog').querySelector('input[type=file]');
console.info('inputAddPhoto:', inputAddPhoto, inputAddPhoto.mozGetFileNameArray);

if (!inputAddPhoto) {
    throw new Error('add photo button not found! i have no idea what could cause this');
}

var newFiles = [];
var myFile1 = new File('C:\\Users\\Vayeate\\Pictures\\Screenshot - Tuesday, August 11, 2015 6-33-58 AM.png'); // using local file for testing
var myFile2 = new File('C:\\Users\\Vayeate\\Pictures\\Screenshot - Tuesday, August 11, 2015 6-38-08 AM.png'); // using local file for testing

newFiles.push(myFile1);
newFiles.push(myFile2);

inputAddPhoto.mozSetFileArray(newFiles);


// Step 4 - Focus message field
// var richInputTweetMsg = aContentDocument.getElementById('tweet-box-global');
// richInputTweetMsg.focus(); // not needed because as when the modal opens twitter puts focus into here anways

// Step 5 - Done, now user can choose to type message, tag "whose in photo", and remove previews. The great thing is with this method, the images have not bothered twitter servers, the images are not uploaded until users final write off, when they click the "Tweet" button
осмотр

Я провел некоторую проверку отладчика, поставил точку останова и обнаружил, что она приходит сюда, есть какая-тоadd функция.

Ответы на вопрос(0)

Ваш ответ на вопрос