Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Как помощи расширения браузера, читать html откр с


Автор: Predator199 9.3.2014, 09:34
Доброе утро. Скажите пожалуйста в чем моя ошибка. Пытаюсь написать расширение к браузеру гуглхрома.Суть в том, что мне необходимо прочесть текущую html страницу. К примеру найти какой нибудь элемент на странице.

Если ошибся разделом, прошу заранее простить.

Есть небольшие наработки.
manifest.json

Код

{
  "name": "JS Code Injection",
  "version": "1.0",
  "manifest_version": 2,
  "content_scripts": [
    {
      "matches": [ "http://forum.vingrad.ru/" ],
      "js": [ "/jquery.js", "/background.js" ],
      "run_at": "document_end"
    }
  ],
  "web_accessible_resources": [
    "/injected.js"
  ]
}



background.js
Код

$.get(chrome.extension.getURL('/injected.js'), 
    function(data) {
        var script = document.createElement("script");
        script.setAttribute("type", "text/javascript");
        script.innerHTML = data;
        document.getElementsByTagName("head")[0].appendChild(script);
        document.getElementsByTagName("body")[0].setAttribute("onLoad", "injected_main();");
    }
);



injected1.js

Код

function injected_main() {
    alert('Injected!');
}



Ничего плохого для сайта не хочу сделать исключительно для себя, прочесть html. В качестве примера прописал данный форум.

Добавил расширение  в хром, далее перешел на http://forum.vingrad.ru/.
Как я понимаю, должен получить ответ. То есть сработать алерт, но этого не происходит. В чем ошибка?

В консоле браузера получаю следующее(прикрепил скрин). 
Что за ошибка на перво строчке. Не понятно, как правильно прописать?

Автор: Predator199 9.3.2014, 10:35
Поковырялся, как я понял библиотеку jquery.js не подгружал.
Теперь ошибк 
Код

GET chrome-extension://gbgiedhkmhcghfbpklekopnpdhkmaeni/injected.js net::ERR_FILE_NOT_FOUND

Почему не находит, не понятно smile 

Автор: diadiavova 9.3.2014, 14:29
Цитата(Predator199 @  9.3.2014,  10:34 Найти цитируемый пост)
Как я понимаю, должен получить ответ. То есть сработать алерт, но этого не происходит. В чем ошибка?

Я не знаю архитектуру хрома, но вот какие проблемы тут вижу.

Цитата(Predator199 @  9.3.2014,  10:34 Найти цитируемый пост)
      "matches": [ "http://forum.vingrad.ru/" ],

Здесь ты видимо забыл звездочку поставить (ну или хотябы слеш в конце убрать если запускаешь только на главной странице).
Цитата

"http://forum.vingrad.ru*"

Относительно самого кода, не очень понятно, когда он у тебя выполняется: если к этому времени элемент body еще не существует, то добавлять ему атрибут нет смысла, а если уже загружен - то событие, на которое ты подписываешься уже видимо произошло. То есть сработать этот код как надо может только в случае, если выполняется он когда элемент уже создан, но еще не загружен.

Автор: Predator199 9.3.2014, 18:33
Получилось, ура. Не подскажете . К примеру есть блок, элемент. В нем прописано style="left...bagraund и тд". Как узнать есть ли к примеру у данного элемента, стиль или переменная(не знаю как правильно назвать). bagraund

Автор: diadiavova 9.3.2014, 18:44
http://www.w3schools.com/jsref/dom_obj_style.asp
http://www.w3schools.com/jsref/prop_style_background.asp

Автор: Predator199 9.3.2014, 19:22
Цитата(diadiavova @ 9.3.2014,  18:44)
http://www.w3schools.com/jsref/dom_obj_style.asp
http://www.w3schools.com/jsref/prop_style_background.asp

Спс. Но вот  я больше предпочитаю квери.

Попытался так 
Код

$('body').style.background()
, не выходит=(

Автор: diadiavova 9.3.2014, 19:39
Цитата(Predator199 @  9.3.2014,  20:22 Найти цитируемый пост)
 Но вот  я больше предпочитаю квери.

Ну так надо курить документацию по ней
http://jquery-docs.ru/css/css/#overview

Автор: Predator199 10.3.2014, 04:23
Можно последний вопрос...

Код

$("#an").click(function () {
 alert("кляц");
        });



Кляцаем на блок с id=an.??


Сто та не удается этого сделать....

Автор: vommer 10.3.2014, 09:24
Код

$(document).ready(function() {

$("#ap").click(function () {
 alert("кляц");
        });
    
});

Автор: Predator199 10.3.2014, 10:42
Цитата(vommer @ 10.3.2014,  09:24)
Код

$(document).ready(function() {

$("#ap").click(function () {
 alert("кляц");
        });
    
});

Неа... Все равно не переходит. Даже алерт не срабатывает. В консоле никаких ошибок, библиотека квери подгружина.

Не понимаю, что такое... Вроде бы все верно, а не работает.

Добавлено через 4 минуты и 14 секунд
Подскажите решение данной проблемы, в чем может быть ошибка?

Автор: diadiavova 10.3.2014, 12:13
Цитата(Predator199 @  10.3.2014,  11:42 Найти цитируемый пост)
в чем может быть ошибка? 

В сущности я написал ответ на этот вопрос в первом посте. Разберись, когда именно выполняется твой код и в каком состоянии в этот момент находится документ. В расширениях хрома используются разные типы скриптов, ты ровным счетом ничего не написал о том, где именно ты пишешь этот код. Если это http://developer.chrome.com/extensions/background_pages, то видимо надо подписываться на события вкладок.
Код

chrome.tabs.onUpdated.addListener( function (tabId, changeInfo, tab) {
  if (changeInfo.status == 'complete' && tab.active) {

   // здесь код

  }
})
 Если это https://developer.chrome.com/extensions/content_scripts, то код видимо надо либо напрямую выполнять, либо подписываться на события окна например.
Код

window.addEventListener("load", function()
{
    //Здесь код
}, false);
В любом случае изучай документацию по хрому и пользуйся гуглом, там все легко находится, это не такой вопрос, ответ на который долго искать придется.

Автор: Predator199 10.3.2014, 12:25
Цитата(diadiavova @ 10.3.2014,  12:13)
Цитата(Predator199 @  10.3.2014,  11:42 Найти цитируемый пост)
в чем может быть ошибка? 

В сущности я написал ответ на этот вопрос в первом посте. Разберись, когда именно выполняется твой код и в каком состоянии в этот момент находится документ. В расширениях хрома используются разные типы скриптов, ты ровным счетом ничего не написал о том, где именно ты пишешь этот код. Если это http://developer.chrome.com/extensions/background_pages, то видимо надо подписываться на события вкладок.
Код

chrome.tabs.onUpdated.addListener( function (tabId, changeInfo, tab) {
  if (changeInfo.status == 'complete' && tab.active) {

   // здесь код

  }
})
 Если это https://developer.chrome.com/extensions/content_scripts, то код видимо надо либо напрямую выполнять, либо подписываться на события окна например.
Код

window.addEventListener("load", function()
{
    //Здесь код
}, false);
В любом случае изучай документацию по хрому и пользуйся гуглом, там все легко находится, это не такой вопрос, ответ на который долго искать придется.

Я пожалуй должен был создать новую тему.
Это все работает, работает js на страницах. 

Просто мне необходимо через js, кляцнуть по ссылке. Для того, чтобы перейти по ней. А с гуглом та я уже давненько разобрался.

Не подскажите как на квери или на яваскрипте. Кляцнуть по ссылке, перейти по ней и в тоже время не трогать мышку.

Я еще вчера пожалуй все известное мне варианты перепробовал, ну никак не получается.
Для меня эта задача невыполнима. Вот и обращаюсь за помощью, всю документацию по квери перечитал...

Автор: diadiavova 10.3.2014, 12:29
Цитата(Predator199 @  10.3.2014,  13:25 Найти цитируемый пост)
Кляцнуть по ссылке, перейти по ней и в тоже время не трогать мышку.

Код

document.getElementById("ap").click();


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)