(async function () {
// Ссылка на целевое изображение:
var link = 'https://yousite.ru/image.jpg';
// Скачиваем изображение, как Blob:
var blob = await (await fetch(link)).blob();
// Из ссылки достаем имя файла (он идет после слеша):
var file_name = new URL(link)['pathname'].replace('/', '');
// Преобразуем Blob в File используя имя файла и MIME-тип:
var file = new File([ blob ], file_name, { type: blob.type });
// При помощи DataTransfer создадим коллекцию файлов FileList с файлом:
var dt = new DataTransfer(); dt.items.add(file); var file_list = dt.files;
// Вставим созданную коллекцию файлов с нашим файлом в input:
document.querySelector('input[type="file"]').files = file_list;
// Заставим сработать обработчики изменения на поле вставки, если они есть:
document.querySelector('input[type="file"').dispatchEvent(new Event('change'));
// После завершения операции выведем уведомление в консоли:
console.log('Коллекция файлов вставлена в поле:', file_list);
})();
Да, существуют бесплатные аналоги плагина Intro.js для создания обучающих подсказок на сайте. Вот несколько вариантов:
1) Driver.js - простой в использовании JS плагин с открытым исходным кодом. Позволяет создавать подсказки и обучающие туры по сайту.
2) Hopscotch - еще одна библиотека для создания подсказок с открытым кодом. Легко настраиваемая и кастомизируемая.
3) Joyride - плагин на jQuery для пошаговых инструкций по сайту. Прост в интеграции.
4) Tourist.js - реализует подсказки в стиле попапов с подсветкой элементов. Небольшой размер.
5) Bootstrap Tour - создан на основе популярного фреймворка Bootstrap. Интуитивно понятный интерфейс.
Посмотрите демо этих плагинов, выберите понравившийся по функционалу и простоте использования. Для быстрого старта оптимально подойдут Driver.js или Hopscotch. Удачи!
PDFViewerApplication.pdfDocument.annotationStorage.getAll(); // Вытащит все аннотации из текущего документа
PDFViewerApplication.pdfDocument.annotationStorage.setAll(); // Запишет аннотации в документ (или хранилище?)
let xhr = new XMLHttpRequest();
xhr.open('POST', 'mail.php', true);
xhr.setRequestHeader('Content-Type', 'text/plain');
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
console.log('Ответ сервера:', xhr.responseText);
}
}
}
console.log('Отправляем:', array);
xhr.send(JSON.stringify(array));
<?php
header('Content-Type: text/plain');
$array = json_decode(file_get_contents('php://input'), true);
echo 'Из браузера получены данные: ' . print_r($array, true);
$('p').filter(function(n, el) { return $(el).css('color') == 'rgb(0, 0, 0)'; });
(async () => {
var url = new URL(browser.runtime.getURL('start.html'));
url.searchParams.set('time', new Date().getTime());
var new_window = await browser.windows.create({
'url': url.href,
'type': 'popup',
'focused': true
});
var windows = await browser.windows.getAll();
for (var i = 0; i < windows.length; i++) {
if (windows[i].id != new_window.id) {
await browser.windows.remove(windows[i].id);
}
}
console.log('Приложение открыто');
})();
background.js
, который при запуске браузера создаст popup без элементов управления.xpinstall.signatures.required
и выключите."applications": {
"gecko": {
"id": "YouExtension@Name",
"strict_min_version": "111.0"
}
}
\Data\profile\extensions
, там находим xpi файл с именем расширения, типа такого YouExtension@Name.xpi - распаковываем этот архив в папку с именем YouExtension@Name там же рядом, а сам xpi удаляем.