Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Нужно расширением для Chrome. (https://javascript.ru/forum/css-html/71809-nuzhno-rasshireniem-dlya-chrome.html)

Killigo 14.12.2017 17:02

Нужно расширением для Chrome.
 
Помогите решить задачу:
Есть необходимость в расширении для Chrome, которое при активации будет менять часть кода страницы.

Нужно поменять: href="/sw/Timesheet/TimesheetViev"
На: href="/sw/Timesheet/TimesheetEdit"

Или подскажите куда копать.
В JS я профан. Задача одноразовая и досконально углубляться в JS пока нет времени.

Aetae 14.12.2017 22:32

Берём базовое расширение:
https://javascript.ru/forum/css-html...tml#post470675

Код в content.js заменяем на
Array.prototype.forEach.call(
  document.querySelectorAll('[href="/sw/Timesheet/TimesheetViev"]'),
  function(element){
    element.setAttribute('href', '/sw/Timesheet/TimesheetEdit')
  }
);

Killigo 15.12.2017 09:03

Спасибо, попробую.

Killigo 15.12.2017 09:32

Не удалось загрузить расширение из: ***
Invalid value for 'content_scripts[0].matches[0]': Missing scheme separator.

{
"name": "Test",
"version": "1.0",
"manifest_version": 2,
"description": "Test",
"content_scripts": [
{
"matches": ["ip/sw/Timesheet*"],
"js": ["content.js"]
}
]
}
Повторить попытку

Aetae 15.12.2017 10:06

В matches должен быть адрес сайта, очевидно же вроде...
https://developer.chrome.com/apps/match_patterns

Killigo 15.12.2017 12:19

Очевидно, но в том то и дело, что сайт в локальной сети. И обращаюсь я к нему по ip.

К слову "matches": ["*://*ip/*"],

тоже не прокатывает.

Nexus 15.12.2017 12:23

Killigo, вы страницу открывали, ссылку на которую предоставил Aetae?
Цитата:

Сообщение от developer.chrome.com
Pattern: http://127.0.0.1/*
Description: Matches any URL that uses the http scheme and is on the host 127.0.0.1


Killigo 15.12.2017 12:34

"matches": ["*://ip/*"], расширение загрузилось в chrome, но не заменяет строку.

Killigo 15.12.2017 12:42

Я дико извиняюсь, может это поможет делу:
Полностью строка выглядит так:
<a class="btn btn-default btn-xs" data-ajax="true" data-ajax-loading="#progress" data-ajax-mode="replace" data-ajax-update="#resultsheets" href="/sw/Timesheet/TimesheetView?departmentId=17&amp;GetProdSums=True">ПП</a>

Nexus 15.12.2017 12:56

Killigo, в сообщении №2 этой темы в строке 2 перед равно ("=") звездочку добавьте.
И посмотрите на то, что вы в шапке написали и какой код предоставили.

Killigo 15.12.2017 13:05

Я просто думал что можно менять часть кода html. По типу быстрой замены, т.е. изменение данных расширением перед выводом страницы на экран.

Aetae 15.12.2017 13:44

Цитата:

Сообщение от Nexus (Сообщение 472978)
Killigo, в сообщении №2 этой темы в строке 2 перед равно ("=") звездочку добавьте.
И посмотрите на то, что вы в шапке написали и какой код предоставили.

Не звёздочку, а ^ .:)

Killigo:
Array.prototype.forEach.call(
  document.querySelectorAll('[href^="/sw/Timesheet/TimesheetViev"]'),
  function(element){
    element.setAttribute('href', 
      element.getAttribute('href').replace('Viev', 'Edit')
    );
  }
);


Цитата:

Сообщение от Killigo (Сообщение 472981)
Я просто думал что можно менять часть кода html. По типу быстрой замены, т.е. изменение данных расширением перед выводом страницы на экран.

Нельзя. Во-первых браузер парсит и выводит по мере получения, кусками, т.е. даже если бы можно было менять необработанный текст ответа, то пришлось бы заморочиться. Но расширениям не разрешено менять входной поток в любом случае. Потому работать придётся с готовым результатом, т.е. DOM.
Можно запускать расширение примерно в начале вывода документа и отлавливать добавление узлов, но для данной задачи это не нужно.

Nexus 15.12.2017 13:48

Цитата:

Сообщение от Aetae
Не звёздочку, а ^ .

автор изменил код, ранее верным селектором была бы эта строка:
[href*="/Timesheet/TimesheetViev"]


ps. момент запуска скрипта можно выбрать, опция "run_at".
https://developer.chrome.com/extensions/content_scripts

Aetae 15.12.2017 13:53

Цитата:

Сообщение от Nexus (Сообщение 472993)
автор изменил код, ранее верным селектором была бы эта строка:
[href*="/Timesheet/TimesheetViev"]

Вот негодяй.)

Цитата:

Сообщение от Nexus (Сообщение 472993)
ps. момент запуска скрипта можно выбрать, опция "run_at".
https://developer.chrome.com/extensions/content_scripts

Ага, только document_start не гарантировано срабатывает на старте, увы. В большинстве случаев, но не всегда.

Killigo 15.12.2017 14:36

Почему-то не работает.

<a class="btn btn-default btn-xs" data-ajax="true" data-ajax-loading="#progress" data-ajax-mode="replace" data-ajax-update="#resultsheets" href="/sw/Timesheet/TimesheetView?departmentId=17&amp;GetProdSums=True">ПП</a>
- Это кнопка.

Сейчас мне приходится в браузере нажимать F12 и менять руками Viev на Edit. Думал немного автоматизировать этот процесс. Чтобы при включении расширения и нажатии на кнопку выводилась страница изменения(Edit), а не отображения(View) данных.

manifest.json:
Код:

{
  "name": "Test",
  "version": "1.0",
  "manifest_version": 2,
  "description": "Test",
  "content_scripts": [
    {
      "matches": ["*://ip/*"],
      "js": ["content.js"]
    }
  ]
}

content.js:
Код:

Array.prototype.forEach.call(
  document.querySelectorAll('[href^="/sw/Timesheet/TimesheetViev"]'),
  function(element){
    element.setAttribute('href',
      element.getAttribute('href').replace('Viev', 'Edit')
    );
  }
);

Расширение автоматом активируется?

Aetae 15.12.2017 22:41

Array.prototype.forEach.call(
  document.querySelectorAll('[href^="/sw/Timesheet/TimesheetVie*!*w*/!*"]'),
  function(element){
    element.setAttribute('href',
      element.getAttribute('href').replace('Vie*!*w*/!*', 'Edit')
    );
  }
);

Вы в первом посте от руки писали? Зачем 0_о?

Killigo 18.12.2017 13:14

Не работает. Расширение не надо как-то активировать?

Aetae 18.12.2017 18:09

Работает:
http://ajitae.tk/test/
http://ajitae.tk/test/content.js
http://ajitae.tk/test/manifest.json


Часовой пояс GMT +3, время: 22:21.