【问题标题】:createElement() doesn't workcreateElement() 不起作用
【发布时间】:2012-05-30 21:08:00
【问题描述】:

好的,所以我正在尝试制作 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";
}

无论如何,扩展程序所做的是将 XMLHttpRequest 发送到 Flickr 的 API,获取一些图像(XML 格式的 img 标签)。然后它使用 for 循环遍历这些标签,并为每个标签使用 createElement() 创建一个新的 img 元素,使用constructImageURL() 函数为其提供一个 src 属性并将其附加到弹出页面。我想做的是让你可以真正点击这些图像,并被带到图像的页面。我试图根据创建图像元素的代码创建一个 sn-p 代码,但要创建锚 (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);

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

【问题讨论】:

  • 哦,如果有帮助的话,manifest.json 文件中包含以下内容:{ "name": "My First Extension", "version": "1.0", "manifest_version": 2, "description": "The first extension that I made.", "browser_action": { "default_icon": "icon.png", "default_popup": "results.html" }, "permissions": [ "http://api.flickr.com/" ] }

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


【解决方案1】:

好吧,您应该通过右键单击浏览器操作并单击“检查弹出窗口”来检查开发者工具控制台,看看有什么问题。

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

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);
}

【讨论】:

  • 哦,我也对那个有点困惑——程序是这样的(在 createElement 括号中它有“图像”,它工作,所以我想我需要把“链接”放进去对于锚元素:O 感谢您的帮助!
  • 另外,你能帮我让用户输入在它说“text=hello_world&”的地方工作,以便用户可以输入要搜索的内容吗?我尝试制作一个带有 onsubmit 事件的表单,但失败得很严重......你能帮忙吗?
  • 好吧,您必须将XMLHttpRequest 对象的整个创建过程包装在一个函数中,并传递一个参数,例如text,然后编写"text=" + text + "&" 以插入字符串.然后您必须调用该函数,例如,响应用户按下按钮...嗯...
  • 没关系;我自己使用var q = "example-text-for-the-initial-search"; var req; function querySubmit() { queryForm = document.forms["queryForm"]; queryText = queryForm.elements["query"]; q = queryText.value document.getElementById("images").innerHTML = ""; 完成了它,然后在函数内复制了请求的副本,以便在提交表单时发出另一个请求。我还特意在函数外部声明了 q 和 req ,所以函数仍然可以修改它,但它会是一个公共参数。但是感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-23
  • 2021-01-02
  • 2023-02-07
  • 2016-05-22
  • 2011-02-23
  • 1970-01-01
相关资源
最近更新 更多