如何编写插入新<a>使用onclick AJAX调用
How to write a Chrome extension that inserts new <a> with onclick AJAX calls?
我一直在摆弄一个Chrome扩展,用一个对网络上下载服务器的替代调用来处理向文件插入/替换hrefs,以根据您的行为执行下载。我面临的挑战是,我似乎无法定义一个内容脚本Javascript函数,我可以将所有onclick事件分配给它。
manifest.json
{
"name": "Test",
"version": "0",
"background": {
"scripts": ["background.js"]
},
"manifest_version": 2,
"browser_action": {
"default_title": "Status",
"default_popup": "status.html",
"icons": ["icon.png"],
"default_icon": "icon.png"
},
"content_scripts": [ {
"js": [ "jquery.js", "content.js" ],
"css": ["customStyles.css"],
"matches": [ "http://*"]
}],
"permissions": [
"http://192.168.1.28/"
]
}
我一直在搞的一个示例内容.js:
$('.rRow1,.rRow2 .subject').find('a:first').each(function() {
$(this).after(" <a class='headerlink' href='#' onclick='queue(this);'>[Queue]</a>");
});
var queue = "http://192.168.1.28:8081/adddownload.req?URL=";
function queue(le) {
var link = $(le).attr('href');
alert("Queuing: " + link);
$.ajax({
type: 'GET',
url: queue,
dataType: 'html',
success: function(data) {
try {
console.log(data);
} catch(e) {
alert("Error: " + e.message);
return;
}
}
});
}
我的queued函数在Chrome控制台中抛出一个"Uncaught ReferenceError:queue is not defined"。现在我知道了内容脚本是在一个"孤立的世界"中运行的,我现在知道了为什么排队是未定义的。
我有点迷失的是实现所需功能的方法。我应该在后台处理ajax调用,并从内容脚本中发布消息吗?我还尝试在每个新插入的元素上添加EventListener,但没有成功。
更新好吧,这就是我的想法。它是功能性的,但我真的不喜欢在每个元素上附加Ajax代码的新副本。如果我有一种方法来引用完成这项工作的单个函数,它会更有效率。有什么建议吗?
$('.rRow1,.rRow2 .subject').find('a:first').each(function() {
$(this).after(" <a class='dlqueue' href='#'>[Queue]</a>");
var link = $(this).attr('href');
$(this).next().click(function() {
$.ajax({
type: 'GET',
url: "http://192.168.1.28:8081/adddownload.req?URL="+encodeURIComponent(link),
dataType: 'html',
success: function(data) {
console.log("Download queued.");
}
});
});
});
这样做是最好的方式吗?谢谢
好的,我自己回答这个问题。感谢abraham指出一个变量和函数名称是相同的。这是个问题,但不是真正的问题。
DOM不能调用在内容脚本中定义的函数。内容脚本可以为DOM分配一个函数,但它将存在于DOM中,而不是内容脚本中。例如:
$(this).after(" <a class='headerlink' href='#' onclick='queue(this);'>[Queue]</a>");
这是一个DOM元素,onclick正在调用一个仅存在于内容脚本中但无法从DOM访问的函数。相反,我需要将函数分配给内容脚本中的DOM对象。这是更新的工作示例:
$('.rRow1,.rRow2 .subject').find('a:first').each(function() {
//$(this).after(" <a class='dlqueue' href='#' onclick='queue(this);'>[Queue]</a>");
var el = this;
$(el).after(" <a class='test' href='#'>[Queue]</a>");
$(el).next().click(function() {
queue(el);
});
});
var endpoint = "http://192.168.1.28:8081/adddownload.req?URL=";
var username = "test";
var password = "test";
function queue(el) {
var link = $(el).attr('href');
$.ajax({
type: 'GET',
url: endpoint+link,
dataType: 'html',
username: username,
password: password,
success: function(data) {
console.log("Download queued.");
}
});
}
相关文章:
- 使用onclick绘制SVG路径
- 为什么我的javascript脚本在页面加载时运行,而不是使用onclick
- 如何使用OnClick事件通过参数调用来调用PHP函数
- 使用onClick事件扩展Aviarc容器小部件
- 如何使用onclick事件触发此代码.我尝试过,但失败了
- 如何使用onclick事件调用AngularJS控制器
- 如何使用onclick事件点击一个图像,并让它更改同一网页上的另一个图像
- Ajax在使用onclick选项时无法处理HTML表单中的提交按钮
- 在这种情况下使用onclick事件处理程序可以接受吗
- 将php文件加载到弹出窗口中,并将php变量发布到该弹出窗口中(使用onclick)
- 按钮don't使用onClick-Javascript HTML重定向
- 使用 onClick 进行函数调用
- 如何使用 onclick 进行循环前进
- Image Map 在 FF 和 IE 中不起作用(使用 onclick javascript)
- Web 工作者未使用 onclick
- 如果我在jquery移动中使用“onclick”,按钮不会改变颜色
- 如何使用 OnClick 事件更改结构 JS 的覆盖图像
- 有没有办法在没有真正的点击事件的情况下使用 onclick
- Javascript-使用onclick的函数
- 同时使用OnClick和OnClientClick;不起作用