我的chrome扩展注入css不会工作

时间:2012-02-17 17:47:55

标签: javascript google-chrome google-chrome-extension javascript-framework

我正忙着开发chrome扩展程序。

它会做什么:

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

  2. 使用.split

  3. 拆分结果变量
  4. 当有人点击div时,它会调用一个函数来插入一个css文件,该文件的名称是我在第1号中获得的。

  5. 我的问题:

    单击该按钮时没有任何反应。当我使用变量“newvar”而不是XMLHttpRequest中的变量“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);
      }
    });
    

1 个答案:

答案 0 :(得分:0)

window.user_data = user_data; //&lt; - 不需要。 user_data = xmlhttp.responseText表示user_data对此窗口是全局的。 window.currenttheme = currenttheme.toString(); &lt;&lt; - 不需要

也是downdata [1]是一个字符串,所以替换

currenttheme = downdata[1].toString();

currenttheme = downdata[1];

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