我的 chrome 扩展注入 css 不起作用

发布于 2025-01-06 20:47:50 字数 1519 浏览 1 评论 0原文

我正忙于开发 chrome 扩展。

它将做什么:

  1. 从 PHP 页面 (XMLHttpRequest) 获取数据

  2. 使用 .split 拆分结果变量

  3. 当有人点击一个 div 时,它会调用一个函数来插入一个 css 文件,该文件的名称与我在第 1 步中得到的名称相同。

我的问题:

当我单击该按钮时,什么也没有发生。当我使用 XMLHttpRequest 中的变量“newvar”而不是变量“currenttheme”时,它会起作用。我尝试使用 .toString 将其转换为字符串。哦,警告变量确实有效,并且给出了与 newvar 完全相同的响应。

我的代码:(叹息!)

//My XMLHttpRequest
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    user_data = xmlhttp.responseText;
    window.user_data = user_data;
    processdata();
    }
  }
xmlhttp.open("GET","http://localhost:8888/myphppage.php",true);
xmlhttp.send();

function processdata() {
//split result variable from PHP
var downdata = user_data.split('|||||');
var installedthemes = downdata[0];
currenttheme = downdata[1].toString();
window.currenttheme = currenttheme.toString();
}

function click(e) {
  newvar = "001";
  //insert css - works with variable newvar but not with this one
  chrome.tabs.insertCSS(null,
  {file:currenttheme + ".css"});
  //alerting the variable works, exactly the same as newvar
  alert (currenttheme);
}

document.addEventListener('DOMContentLoaded', function () {
   var divs = document.querySelectorAll('div');
  for (var i = 0; i < divs.length; i++) {
    divs[i].addEventListener('click', click);
  }
});

I am busy developing a chrome extension.

What it will do:

  1. Get data from a PHP page (XMLHttpRequest)

  2. Split the result variable using .split

  3. And when someone clicks on a div, it will call a function to insert a css file with that name I got in number 1.

My problem:

Well nothing happens when I click that button. It works when I used the variable, "newvar", instead of the variable, "currenttheme" from the XMLHttpRequest. I tried converting it to a string as well using .toString. Oh, alerting the variable does work and gives exactly the same response as newvar.

My code: (Sigh!)

//My XMLHttpRequest
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    user_data = xmlhttp.responseText;
    window.user_data = user_data;
    processdata();
    }
  }
xmlhttp.open("GET","http://localhost:8888/myphppage.php",true);
xmlhttp.send();

function processdata() {
//split result variable from PHP
var downdata = user_data.split('|||||');
var installedthemes = downdata[0];
currenttheme = downdata[1].toString();
window.currenttheme = currenttheme.toString();
}

function click(e) {
  newvar = "001";
  //insert css - works with variable newvar but not with this one
  chrome.tabs.insertCSS(null,
  {file:currenttheme + ".css"});
  //alerting the variable works, exactly the same as newvar
  alert (currenttheme);
}

document.addEventListener('DOMContentLoaded', function () {
   var divs = document.querySelectorAll('div');
  for (var i = 0; i < divs.length; i++) {
    divs[i].addEventListener('click', click);
  }
});

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

等往事风中吹 2025-01-13 20:47:50

window.user_data = user_data;// <- 不需要。 user_data = xmlhttp.responseText 意味着 user_data 对此窗口是全局的。
window.currenttheme = currenttheme.toString(); <<- 也不需要

downdata[1] 是一个字符串,因此替换

currenttheme = downdata[1].toString();

currenttheme = downdata[1];

如果这没有帮助,请尝试alert(currenttheme);并查看您是否获得了所需的主题名称,因为有时 PHP 会抛出错误并死掉,这可能不会产生“|||||”。检查 php 输出并对 xmlhttp.responseText 发出警报,看看一切是否正常。

window.user_data = user_data;// <- not required. user_data = xmlhttp.responseText implies user_data is global to this window.
window.currenttheme = currenttheme.toString(); <<- not required too

also downdata[1] IS a string so replace

currenttheme = downdata[1].toString();

with

currenttheme = downdata[1];

If this doesn't help, try alert(currenttheme); and see if you are getting the required theme name, because sometimes PHP can throw errors and die which may not produce a "|||||". Check the php output and alert the xmlhttp.responseText too to see if everything is OK.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文