createElement()不起作用

时间:2012-05-29 21:05:22

标签: javascript google-chrome google-chrome-extension dom-manipulation

好吧,我正在尝试制作Chrome扩展程序。我在这方面有点像菜鸟,这就是为什么我开始从教程网站获取示例扩展并添加内容。我从一些我记不起的网站上得到了它,如果你真的想要归属,我可以搜索一下。代码:

var req = new XMLHttpRequest();
req.open(
"GET",
"http://api.flickr.com/services/rest/?" +
    "method=flickr.photos.search&" +
    "api_key=90485e931f687a9b9c2a66bf58a3861a&" +
    "text=hello_world&" +
    "safe_search=1&" +  
    "content_type=1&" +  
    "sort=relevance&" +  
    "per_page=24",
true);
req.onload = showPhotos;
req.send(null);

function showPhotos() {
  var photos = req.responseXML.getElementsByTagName("photo");

  for (var i = 0, photo; photo = photos[i]; i++) {
    var img = document.createElement("image");
    img.src = constructImageURL(photo);
    document.getElementById("images").appendChild(img);
  }
}

function constructImageURL(photo) {
  return "http://farm" + photo.getAttribute("farm") +
  ".static.flickr.com/" + photo.getAttribute("server") +
  "/" + photo.getAttribute("id") +
  "_" + photo.getAttribute("secret") +
  "_s.jpg";
}

所以,无论如何,扩展所做的是它向Flickr的API发送XMLHttpRequest,获取一些图像(XML格式的img标签)。然后使用for循环遍历这些标记,并且对于每个标记,它使用createElement()创建一个新的img元素,使用constructImageURL()函数为其提供src属性并将其附加到弹出页面。我想做的就是让它实际上点击这些图像,然后进入图像的页面。我尝试基于创建图像元素的代码创建一段代码,但是创建了锚(a)元素,我将其添加到for循环中。它看起来像这样:

var a = document.createElement("link");
a.href = constructImageURL(photo);
a.target = "_blank";
document.getElementById("images").appendChild(a);

然后我添加了一些代码来将img元素附加到锚元素,从而有效地构建<a><img /></a>结构:

document.a.appendChild(img);

但是,它不起作用。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

那么,您应该通过右键单击浏览器操作并单击“Inspect popup”来检查开发人员工具控制台,看看有什么问题。

我想您可能想要使用setAttribute,只是为了确保。并且链接的元素是<a>而不是<link>,而图片的元素是<img>而不是<image>。此外,您不希望document.a.appendChild,您想要将图像附加到当前变量。所以它应该是这样的:

function showPhotos() {
    var photos = req.responseXML.getElementsByTagName("photo");
    var a = document.createElement("a");
    a.setAttribute("href",constructImageURL(photo));
    a.setAttribute("target","_blank");

    var img = document.createElement("img");
    img.setAttribute("src",constructImageURL(photo));

    a.appendChild(img);
    document.getElementById("images").appendChild(a);
}