2011-12-03 96 views
0

下面的代码尝试打开相应的发布对象的新标签页,当它的图像在popup.html中被点击时。出于某种原因,新选项卡为空,并且不会按照Post单例中的this.Link所指定的页面进行。任何帮助,将不胜感激!Chrome浏览器扩展程序:标签问题

<html> 
<head> 
    <style> 
     body { 
      min-width:357px; 
      overflow-x:hidden; 
     } 

     img { 
      margin:5px; 
      border:2px solid black; 
      vertical-align:middle; 
      width:75px; 
      height:75px; 
     } 
    </style> 


    <script> 
     var req = new XMLHttpRequest(); 
     req.open(
     "GET", 
     "http://thekollection.com/feed/", 
     true); 
     req.onload = showPosts; 
     req.send(null); 

     function showPosts() { 
      var elements = req.responseXML.getElementsByTagName("item"); 

      for (var i = 0, item; item = elements[i]; i++) { 
       var description = item.getElementsByTagName("description")[0].childNodes[0].nodeValue; 
       var link = item.getElementsByTagName("link")[0].childNodes[0].nodeValue; 
       var txtLink = link.toString(); 
       var txtDesc = description.toString(); 

       var start = txtDesc.indexOf("\"") + 1; 
       var end = txtDesc.indexOf(".jpg") + 4; 
       var imgURL = txtDesc.substring(start, end); 

       var post = new function(){ 
        this.Link = txtLink; 
        this.Description = txtDesc; 
        this.ImageURL = imgURL; 
        this.imgElement = document.createElement("image"); 
        this.displayTab = function(){ 
         chrome.tabs.create({'url' : this.Link}, function(tab){}); 
        } 
       } 


       post.imgElement.addEventListener("click", post.displayTab, false) 
       post.imgElement.src = post.ImageURL; 

       document.body.appendChild(post.imgElement); 
      }  
     }  
    </script> 
</head> 
<body> 
</body> 

回答

1

您注册post.displayTab作为post.imgElement事件侦听器,这意味着的this的值将是post.imgElement当事件监听器被调用。因此,没有Link属性(this.Link未定义)。为了避免这个问题的一个方法是不同的注册事件处理程序:

post.imgElement.addEventListener("click", function() { 
    post.displayTab(); 
}, false) 

post.displayTab被称为这里这么this变量将被正确设定post对象的方法。另一种选择是停止在post.displayTab使用this

this.imgElement = document.createElement("image"); 
var me = this; 
this.displayTab = function(){ 
    chrome.tabs.create({'url' : me.Link}, function(tab){}); 
} 

me变量记住了“正确” this值。

+0

非常感谢你,这个修好了! – Jasdev

+0

@Jasdev:如果有帮助,请随时接受答案:http://stackoverflow.com/faq#howtoask –

相关问题