Плагин для 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 Код:
textToFind = TrimStr(obj.value);//обрезаем пробелы- Uncaught ReferenceError: TrimStr is not defined Если без динамического обработчика т.е. повесить на инпут обычный обработчик: <input type="button" value="найти" onclick="FindOnPage('text-to-find'); return false; "/> то все работает но так инлайново для плагина нельзя по политике хрома |
lonedr,
может сначала jquery.js а потом popup.js , строки 2 и 3 поменять в popup.html? |
увы но не в этом дело (
вот запустил с напряму (не как плагин, а как html старничка) все скинул в один html файл <head> <script src="jquery.js"></script> </head> <body> <h2>поиск</h2> <input type="text" id="text-to-find" placeholder="поиск"> <input type="button" value="найти" id="btn-text-to-find" /> <br/><i>Название</i> <hr/> <table border='2' cellpadding='20'> РАЗ<br> ДВА.<br> ТРИ<br> 4<br> 00:25:92 Guangzho Guangzhou Shirui Electronic Co., Ltd<br> 00:25:93 DatnetIn DatNet Informatikai Kft.<br> 00:25:94 Eurodesi Eurodesign BG LTD<br> 00:25:95 Northwes Northwest Signal Supply, Inc<br> 00:25:96 Gigavisi GIGAVISION srl<br> 00:25:97 KalkiCom Kalki Communication Technologies<br> 00:25:98 ZhongSha Zhong Shan City Litai Electronic Industrial Co. Ltd<br> 00:25:99 HedonEDB Hedon e.d. B.V.<br> 00:25:9A Cestroni CEStronics GmbH<br> 00:25:9B BeijingP Beijing PKUNITY Microsystems Technology Co., Ltd<br> 00:25:9C Cisco-Li Cisco-Linksys, LLC<br> 00:25:9D Private<br> 00:25:9E HuaweiTe Huawei Technologies Co., Ltd.<br> 00:25:9F Technodi TechnoDigital Technologies GmbH<br> 00:25:A0 Nintendo Nintendo Co., Ltd.<br> 00:25:A1 Enalasys<br> 00:25:A2 AltaDefi Alta Definicion LINCEO S.L.<br> 00:25:A3 TrimaxWi Trimax Wireless, Inc.<br> 00:25:A4 Eurodesi EuroDesign embedded technologies GmbH<br> 00:25:A5 WalnutMe Walnut Media Network<br> 00:25:A6 CentralN Central Network Solution Co., Ltd.<br> 00:25:A7 Comverge Comverge, Inc </table> </body> <style> #sign {width: 110px;height: 33px;padding: 0;margin: 0;position: fixed;right: 0;bottom: 0;}</style> <script type="text/javascript"> $(window).load(function() { alert ("22d"); 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 = window.document.getElementById(inputId); var textToFind; if (obj) { textToFind = TrimStr(obj.value);//обрезаем пробелы } if(copy_page.length>0) document.body.innerHTML=copy_page; else copy_page=document.body.innerHTML; document.body.innerHTML = document.body.innerHTML.replace(eval("/name="+lastResFind+"/gi")," ");//стираем предыдущие якори для скрола document.body.innerHTML = document.body.innerHTML.replace(eval("/"+textToFind+"/gi"),"<a name="+textToFind+" style='background:yellow'>"+textToFind+"</a>"); //Заменяем найденный текст ссылками с якорем; lastResFind=textToFind; // сохраняем фразу для поиска, чтобы в дальнейшем по ней стереть все ссылки window.location = '#'+textToFind;//перемещаем скрол к последнему найденному совпадению } </script> та-же самая ошибка |
TrimStr вынести из события $(window).load.
|
<!--################################################################################################### --> <head> <script src="jquery.js"></script> </head> <body> <h2>поиск</h2> <input type="text" id="text-to-find" placeholder="поиск"> <input type="button" value="найти" id="btn-text-to-find" /> <br/><i>Название</i> <hr/> <table border='2' cellpadding='20'> РАЗ<br> ДВА.<br> ТРИ<br> 4<br> 00:25:92 Guangzho Guangzhou Shirui Electronic Co., Ltd<br> 00:25:93 DatnetIn DatNet Informatikai Kft.<br> 00:25:94 Eurodesi Eurodesign BG LTD<br> 00:25:95 Northwes Northwest Signal Supply, Inc<br> 00:25:96 Gigavisi GIGAVISION srl<br> 00:25:97 KalkiCom Kalki Communication Technologies<br> 00:25:98 ZhongSha Zhong Shan City Litai Electronic Industrial Co. Ltd<br> 00:25:99 HedonEDB Hedon e.d. B.V.<br> 00:25:9A Cestroni CEStronics GmbH<br> 00:25:9B BeijingP Beijing PKUNITY Microsystems Technology Co., Ltd<br> 00:25:9C Cisco-Li Cisco-Linksys, LLC<br> 00:25:9D Private<br> 00:25:9E HuaweiTe Huawei Technologies Co., Ltd.<br> 00:25:9F Technodi TechnoDigital Technologies GmbH<br> 00:25:A0 Nintendo Nintendo Co., Ltd.<br> 00:25:A1 Enalasys<br> 00:25:A2 AltaDefi Alta Definicion LINCEO S.L.<br> 00:25:A3 TrimaxWi Trimax Wireless, Inc.<br> 00:25:A4 Eurodesi EuroDesign embedded technologies GmbH<br> 00:25:A5 WalnutMe Walnut Media Network<br> 00:25:A6 CentralN Central Network Solution Co., Ltd.<br> 00:25:A7 Comverge Comverge, Inc </table> </body> <style> #sign {width: 110px;height: 33px;padding: 0;margin: 0;position: fixed;right: 0;bottom: 0;}</style> <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 = window.document.getElementById(inputId); var textToFind; if (obj) { textToFind = TrimStr(obj.value);//обрезаем пробелы } else { alert("Введенная фраза не найдена"); return; } if (textToFind == "") { alert("Вы ничего не ввели"); return; } if(document.body.innerHTML.indexOf(textToFind)=="-1") alert("Ничего не найдено, проверьте правильность ввода!"); if(copy_page.length>0) document.body.innerHTML=copy_page; else copy_page=document.body.innerHTML; document.body.innerHTML = document.body.innerHTML.replace(eval("/name="+lastResFind+"/gi")," ");//стираем предыдущие якори для скрола document.body.innerHTML = document.body.innerHTML.replace(eval("/"+textToFind+"/gi"),"<a name="+textToFind+" style='background:red'>"+textToFind+"</a>"); //Заменяем найденный текст ссылками с якорем; lastResFind=textToFind; // сохраняем фразу для поиска, чтобы в дальнейшем по ней стереть все ссылки window.location = '#'+textToFind;//перемещаем скрол к последнему найденному совпадению </script> сделал, теперь вообще ошибок нет и ничего не происходит, похоже я туплю уже |
ругается вот на это:
window.location = '#'+textToFind;//перемещаем скрол к последнему найденному совпадению Uncaught SyntaxError: Unexpected end of input |
Цитата:
|
А вот элементы будут доступны как раз после наступления события $(window).load.
|
дак как сделать, что-бы при вводе слова в текстбокс оно искалось на странице без использования инлайновых скрипто в html, что-бы в html был только html) уже и гуглил и перекодил все 3 дня сижу :С
|
|
Часовой пояс GMT +3, время: 22:49. |