Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.09.2014, 16:56
Новичок на форуме
Отправить личное сообщение для lazKod Посмотреть профиль Найти все сообщения от lazKod
 
Регистрация: 10.09.2014
Сообщений: 5

Плагин с тулбаром для Chrome
Здравствуйте. Возникла необходимость создания инструмента, который бы взаимодействовал с html и отправлял сообщения на сервер. Выбрал реализацию- расширение для браузера Chrome . И столкнулся с массой проблем:
1. Нужно создать панель инструментов с кнопками, которая показывалась бы вверху и слева у каждой страницы.
2. Скрипт должен вызывать всплывающее окно с формой, которая может взаимодействовать с контентом страницы.
---
Что я сделал, это создал content.js который добавил панели к текущему документу, но с сожалению некоторые сайты своим css и js усложняют работу с панелью. Аналогично с окном формы - там много кода, происходит конфликт с сайтом, вывел её в iframe, но из iframe нельзя обратиться к функциям content.js .

Есть советы как это можно грамотно сделать? Или придётся пилить exe приложение с компонентом браузера?
Ответить с цитированием
  #2 (permalink)  
Старый 10.09.2014, 17:44
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,587

Писал только для ff но думаю не велика разница.
Панель и окна следует создавать на уровне браузера, а не страниц и в единичном экземпляре. Обращаться же из вышестоящего кода к элементом текущей вкладки ничего мешает. Разве что чуток длиннее будет, например не document.querySelectorAll(".class"), а (псевдокод) getCurrentTab().window.document.querySelectorAll(".class")
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 10.09.2014, 19:45
Новичок на форуме
Отправить личное сообщение для lazKod Посмотреть профиль Найти все сообщения от lazKod
 
Регистрация: 10.09.2014
Сообщений: 5

Цитата:
Панель и окна следует создавать на уровне браузера, а не страниц и в единичном экземпляре. Обращаться же из вышестоящего кода к элементом текущей вкладки ничего мешает.
Да как раз обращаться скорее всего не так сложно, а вот как создать панель на уровне браузера- не нашёл.

А в лисе как это делается?
Ответить с цитированием
  #4 (permalink)  
Старый 10.09.2014, 20:11
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,587

В лисе всё представление в xul(тот же xml) - там всё элементарно, пишешь свой xul файл и он встраивается в то место куда скажешь. Можно и одним скриптом обойтись, все элементы интерфейса создаются через createElement.(для сложных - есть специальные функции)

По хрому надо гуглить.
/g chrome extension custom panel
Прошёлся по первым ссылкам, вроде ничего запредельного.
__________________
29375, 35

Последний раз редактировалось Aetae, 10.09.2014 в 20:13.
Ответить с цитированием
  #5 (permalink)  
Старый 10.09.2014, 20:42
Новичок на форуме
Отправить личное сообщение для lazKod Посмотреть профиль Найти все сообщения от lazKod
 
Регистрация: 10.09.2014
Сообщений: 5

Сообщение от Aetae Посмотреть сообщение
По хрому надо гуглить.
/g chrome extension custom panel
Прошёлся по первым ссылкам, вроде ничего запредельного.
Спасибо. Похожее находил, но это создание панели в devtool то есть в отладчике, который вызывается через ф12. Не особенно удобно именно там иметь, хотелось встроить свою панель вверх и в бок. В принципе рассматривал как вариант, но сейчас попробую лису.
Ответить с цитированием
  #6 (permalink)  
Старый 10.09.2014, 21:36
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,587

lazKod, раз можно в девтулз то можно и в другое место, вестимо.

Х.з. как с этим в chrome но расширение для ff можно просто скачать, разархивировать(xpi это zip) и посмотреть как там всё устроено, потому часто задача сводится к нахождению расширения с похожим на нужный функционалом.)
__________________
29375, 35
Ответить с цитированием
  #7 (permalink)  
Старый 11.09.2014, 23:08
Новичок на форуме
Отправить личное сообщение для lazKod Посмотреть профиль Найти все сообщения от lazKod
 
Регистрация: 10.09.2014
Сообщений: 5

Сообщение от Aetae Посмотреть сообщение
lazKod, раз можно в девтулз то можно и в другое место, вестимо.
Не факт. Очень даже не факт)
Да, я разбирал другие расширения- как я понял либо все создают свои html теги и ими оправляют, либо пихают iframe который непосредственно обращается с расширением. Этот способ оптимальный, хотя место под ним не освобождается и приходится добавлять margin к телу.

Теперь другая проблема встала- необходимо при клике на элемент выполнять с ним действия. Всё просто, но если неа него повесели событие click ( $('.class').click(function(location = 'new url' )) - то происходит вызов этого события и переход по ссылке. Как можно либо перехватить либо удалить все события связанные с элементом?
Ответить с цитированием
  #8 (permalink)  
Старый 11.09.2014, 23:41
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,587

Зависит от каждого конкретного случая. Например в приведённом можно сделать так:
$('.class').unbind('click')
Более-менее универсально можно разве что подменить функцию навешивания обработчика в самом начале загрузки страницы:
window.EventTarget.prototype.addEventListener = function(old){
    return function(event, func){
        console.log('Навешиваем событие: ' + event + ', на элемент:', this, 'с обрабочиком:', func);
        old.apply(this, arguments);       
    }    
}(window.EventTarget.prototype.addEventListener);

document.addEventListener('click', function(){alert(1)},false)

Там где стоит console.log вы, соответственно, можете делать что хотите, как с самой функцией, так и с передаваемыми параметрами.
Вообще по-хорошему вам бы исследовать как работает нативный "выбор элемента" в инструментах разработчика и, возможно, даже воспользоваться им напрямую, но тут уж всё на вашей совести.
__________________
29375, 35
Ответить с цитированием
  #9 (permalink)  
Старый 12.09.2014, 22:18
Новичок на форуме
Отправить личное сообщение для lazKod Посмотреть профиль Найти все сообщения от lazKod
 
Регистрация: 10.09.2014
Сообщений: 5

unbind и подменить функцию обработчика - пробовал, но не удалось. После долгого гугления нашёл 2 пути :
1. Это компонент http://sprymedia.co.uk/VisualEvent/demo/
Как я понял там просто находятся все функции обработки, в зависимости от js движка. Достаточно много кода и муторно вытаскивать и удалять .

2. Нашёл такую функцию getEventListeners в консоли хрома. Она возвращает список событий на элементе, у которых есть функция remove(). Идеально было бы, но так и не получилось получить доступ из моего расширения.

И вариант вроде рабочий, немного изврат но ...
mouseDown = function(e) {
 
    var obj = document.createElement('div');
    obj.id = '__chm_click';
    obj.style.cssText = 'position:fixed;top:0px;left:0px;width:100%;height:100%; background-color:red; ';

    document.body.appendChild(obj);
 
};
mouseUp = function(e) {

    var elClick = document.getElementById('__chm_click');
    elClick.parentNode.removeChild(elClick);
    

};
document.addEventListener('mousedown', mouseDown);
document.addEventListener('mouseup', mouseUp);

Тупо создаём слой при нажатии на любой элемент. Вроде пока работает.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Расширение для Google Chrome garfiik Общие вопросы Javascript 2 12.07.2015 18:30
Расширение для Chrome shoxel Библиотеки/Тулкиты/Фреймворки 0 03.01.2014 18:05
Проблема с onended для chrome С.Тарасов Events/DOM/Window 14 21.05.2012 18:55
Плагин для загрузки картинок(как на вконтакте) Boneshock jQuery 10 18.07.2011 10:35
Подскажите плагин для реализации Юрий Шу jQuery 5 25.06.2010 17:36