Страницы

Поиск по вопросам

Показаны сообщения с ярлыком userjs. Показать все сообщения
Показаны сообщения с ярлыком userjs. Показать все сообщения

четверг, 23 января 2020 г.

ВКонтакте доступ к jQuery из UserJS

#javascript #вконтакте #userjs


Если открыть консоль браузера на странице ВКонтакте, то введя  

$


увидим в выводе объект jQuery, но если внедрить на страницу UserScript:  

function append() {
    console.log( $ );
};

window.setInterval( append, 1000 );


то ровно раз в секунду в консоль будет падать ошибка undefined.
В каком пространстве имен искать jQuery и как вообще такое может быть, ведь UserScript
исполняется в глобальном контексте и в том же контексте происходит работа, если напрямую
вводить команды в консоль ?
    


Ответы

Ответ 1



Команды из консоли выполняются в контексте window + доступно API самого браузера. То, что вы видите, это ссылка на один из методов API браузера. Подробно с API системой вы можете познакомиться в документации соответствующего браузера. Сам сайт ВКонтакте не использует в своей работе библиотеку jQuery.

Ответ 2



Возможно, не подключена jQuery, подключите сами: // @require https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js

понедельник, 23 декабря 2019 г.

Имитация комбинации “Shift + Left Click"

#javascript #userjs


Использую user.js. Нужно эмулировать сочетание Shift + Left Click на элементе с id.
Пробовал window.open, но не подходит, т.к ссылки генерируются автоматически.

        function openClient() {
            window.open("динамические ссылки", "_blank", "toolbar=no, scrollbars=no,
resizable=no, top=50, left=50, width=450, height=615");
        }


Отлично работает:

var start = document.getElementById("startBtn").click();


Можно ли как-то изменить, чтобы клик происходил с зажатой клавишей shift сразу при
заходе на страницу, но без jQuery?
    


Ответы

Ответ 1



Можно создать объект события MouseEvent вручную, передав ему в конструктор кроме базовых параметров ещё и shiftKey: true: document.getElementById("button").addEventListener("click", function() { var event = new MouseEvent("click", { bubbles: true, cancelable: true, view: window, shiftKey: true }); document.getElementById("link").dispatchEvent(event); }); Link Для наглядности примера событие генерируется по клику на кнопку. Но при загрузке страницы, если заменить document.getElementById("button").addEventListener("click" на document.addEventListener("DOMContentLoaded", оно тоже работает. Проверено на работоспособность в Opera 49.0.2725.47 В IE 11.125.16299.0 new MouseEvent работать отказывается, но зато там работает deprecated метод initMouseEvent. Однако передачу true в качестве параметра shiftKey он благополучно игнорирует, открывая ссылку в том же окне: document.getElementById("button").addEventListener("click", function() { var event = document.createEvent("MouseEvent"); event.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, true, false, 0, null); document.getElementById("link").dispatchEvent(event); }); Link А чтобы было не слишком скучно, поведение в Firefox 57.0.2 отличается и от Opera, и от IE: в нём работают как new MouseEvent, так и initMouseEvent, однако при передаче true в shiftKey в обоих случаях вообще ничего не происходит (без shiftKey работает).

суббота, 16 марта 2019 г.

ВКонтакте доступ к jQuery из UserJS

Если открыть консоль браузера на странице ВКонтакте, то введя
$
увидим в выводе объект jQuery, но если внедрить на страницу UserScript:
function append() { console.log( $ ); };
window.setInterval( append, 1000 );
то ровно раз в секунду в консоль будет падать ошибка undefined В каком пространстве имен искать jQuery и как вообще такое может быть, ведь UserScript исполняется в глобальном контексте и в том же контексте происходит работа, если напрямую вводить команды в консоль ?


Ответ

Команды из консоли выполняются в контексте window + доступно API самого браузера. То, что вы видите, это ссылка на один из методов API браузера. Подробно с API системой вы можете познакомиться в документации соответствующего браузера. Сам сайт ВКонтакте не использует в своей работе библиотеку jQuery