Показать сообщение отдельно
  #1 (permalink)  
Старый 12.05.2017, 12:03
Новичок на форуме
Отправить личное сообщение для lonedr Посмотреть профиль Найти все сообщения от lonedr
 
Регистрация: 12.05.2017
Сообщений: 7

Плагин для Chrome работа с DOM поиск по странице
Добрый день, я новичек в JS)
Пишу плагин для хрома, его задача поиск текста на странице.
Т.е. пользователь вводит в текстовое поле слово, жмет на кнопку и нужное подсвечивается. Если делать не как плашин а просто в html то проблем нет, но вот с плагином столкнулся с проблемой:
Поскольку в плагинах инлайн скрипты запрещены, то повесить обработчик на кнопку в popup.html нельзя, следовательно попытался прикрутить динамиеский обработчик, но что-то не вышло.
Что имею:

popup.html

> <input type="text" id="text-to-find" placeholder="поиск">  <input
> type="button"  value="найти" id="btn-text-to-find" />



скрипт поиска (s.js):

<script type="text/javascript">
var lastResFind=""; // последний удачный результат
var copy_page=""; // копия страницы в ихсодном виде
document.getElementById('btn-text-to-find').addEventListener('click',FindOnPage('text-to-find'));
function TrimStr(s) {
     s = s.replace( /^\s+/g, '');
  return s.replace( /\s+$/g, '');
}
function FindOnPage(inputId) {//ищет текст на странице, в параметр передается ID поля для ввода
  var obj = document.getElementById('btn-text-to-find').addEventListener('click',FindOnPage('text-to-find'))
  var textToFind;

  if (obj) 
  {
    textToFind = TrimStr(obj.value);//обрезаем пробелы
  }


скрипт лежит в отдельном файле, который вызывается фоновым обработчиком:

popup.js
document.addEventListener("DOMContentLoaded",function (){
   	chrome.tabs.executeScript( {"file": "s.js"});
});


Все это обернуто в DOMContentLoaded, значит весь DOM уже построен (я ан это надеюсь)

popup.js вызывается из popup.html:
<head>
<script src="popup.js"></script>
<script src="jquery.js"></script>
</head>


Обычная структура плагина:
popup.html->popup.js->s.js

при запуске, консоль ругается на строчки:



Код:
Uncaught ReferenceError: TrimStr is not defined
    at FindOnPage (index.html:79)
    at index.html:58
    at dispatch (jquery.js:3)
    at i (jquery.js:3)



Код:
 textToFind = TrimStr(obj.value);//обрезаем пробелы-  Uncaught ReferenceError: TrimStr is not defined

document.getElementById('btn-text-to-find').addEventListener('click',FindOnPage('text-to-find'));
подскажите плс как заставить эту адскую машину работать, а то я совсем запутался.

Если без динамического обработчика т.е. повесить на инпут обычный обработчик:

<input type="button"  value="найти" onclick="FindOnPage('text-to-find'); return false; "/>


то все работает
но так инлайново для плагина нельзя по политике хрома
Ответить с цитированием