Как удалить встроенные стили, добавленные внешним скриптом? - PullRequest
0 голосов
/ 02 марта 2020

У меня есть <script>, который генерирует атрибуты <style> и встроенный стиль с тегами !important. Я хотел бы удалить весь этот стиль.

Мой план состоял в том, чтобы использовать обратный вызов javascript onload (и некоторые jQuery) для удаления блока <style> и всех атрибутов встроенного стиля - но я не могу выбрать ни один из этих элементы. Вот что я играю:

var script = document.createElement("script");

script.src      = "//script.path.js";
script.onload   = function(){

    $(this).parent().find("style").remove();
    $(this).parent().find("[style]").removeAttr("style");

};

$(target).append(script);

ОБНОВЛЕНИЕ

Кажется, что элементы, генерируемые <script>, просто недоступны в DOM сразу. Если я использую setInterval, чтобы проверить, существуют ли сначала элементы, я могу заставить это работать. Я думаю, что есть лучший способ сделать это, хотя ...

1 Ответ

0 голосов
/ 03 марта 2020

Согласно этому другому вопросу , вы должны добавить тег script к DOM до настройки onload.

var script = document.createElement("script");
$(target).append(script);

script.src = "//script.path.js";
script.onload = function(){
  $(this).parent().find("style").remove();
  $(this).parent().find("[style]").removeAttr("style");
};

https://jsbin.com/minoyeyicu/edit?html, js, вывод

ОБНОВЛЕНИЕ : уточнив, что проблема в том, что тег style / Атрибуты / еще не были применены к DOM до тех пор, пока после загруженный скрипт не выполнил выполнено , одна из альтернатив (в зависимости от того, находится ли загруженный скрипт под вашим контролем), - передать callback параметр для загруженного сценария, и загруженный сценарий выполняет обратный вызов, когда он завершает выполнение (именно так работает API Карт Google ). Например,

script.src = '//script.path.js?callback=removeStyles'

Чтобы использовать параметр callback из script.path.js, можно сделать что-то вроде , это можно сделать .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...