Расширение, пытающееся внедрить CSS в веб-страницу, вместо этого внедряет CSS в себя - PullRequest
0 голосов
/ 18 декабря 2018

Я учил себя, как создавать расширения с целью их использования для внедрения CSS (и, в конечном итоге, внедрения SVG с CSS в качестве носителя, но это проблема для другого дня).

Вотмой текущий код:

manifest.json

{
  "name": "SVG Extension Attempt",
  "version": "1.0",
  "description": "SVG filter please...",
  "permissions": ["activeTab", "declarativeContent", "storage"],
  },
  "browser_action": {
    "default_popup": "popup.html",
    "default_icon": {
      "16": "images/get_started16.png",
      "32": "images/get_started32.png",
      "48": "images/get_started48.png",
      "128": "images/get_started128.png"
    }
  },
	{
    "16": "images/get_started16.png",
    "32": "images/get_started32.png",
    "48": "images/get_started48.png",
    "128": "images/get_started128.png"
  },
	
  "manifest_version": 2

}

popup.html

<!DOCTYPE html>
<html>
  <head>
    <style>
      button {
        height: 30px;
        width: 60px;
        outline: none;
				background-color: magenta;
      }
    </style>

  </head>
  <body>
    <button id="changeColour">Change colour</button>
	<script src="popup.js"></script>
  </body>
</html>

popup.js

let changeColour = document.getElementById('changeColour');

function addStyleString(str) {
	var node = document.createElement('style');
	node.innerHTML = str;
	node.setAttribute('id', 'inserted-style');
	document.body.appendChild(node);
}
	
changeColour.onclick = addStyleString('body {filter: blur(5px);}');

До сих пор мне удалось запустить расширение, но я обнаружил, что вместо введения фрагмента CSS в тело текущей веб-страницы вместо этого он вставляет его прямов тело popup.html.См. Gif:

A beautiful demonstration of the problem.

Я знаю, что это как-то связано с вызовом popup.js из popup.html, но я не вижу обходного путия на данный момент - но я просто знаю, что это будет что-то невероятно простое.

(PS Это всего лишь три файла, потому что это в основном практика, чтобы научиться использовать эту технику инъекции)

1 Ответ

0 голосов
/ 18 декабря 2018

Вам необходимо выполнить код в табл.Для этого измените ваш popup.js следующим образом:

let changeColour = document.getElementById('changeColour');

function addStyleString(str) {
  // preparing the code as a string
  var code = `
    var node = document.createElement('style');
    node.innerHTML = '${str}';
    node.setAttribute('id', 'inserted-style');
    document.body.appendChild(node);
  `;

  // executing the code
  chrome.tabs.executeScript(null, {code: code});
}

changeColour.onclick = addStyleString('body {filter: blur(5px);}');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...