这是this question的后续问题。简短版本是:我尝试使用javascript(Chrome扩展程序)在关闭投票弹出窗口中插入一个欺骗链接(在Stack Overflow上以密码投票方式)。之前的回答让我更进一步,似乎是解决方案。但是,该问题的答案在控制台中有效,但由于某种原因,我的Chrome扩展程序无效。
问题是:打开投票以关闭问题上的Stack Overflow上的弹出窗口并单击欺骗原因。我可以在控制台中运行以下代码:
var $dupeQuestion = $('#duplicate-question');
$dupeQuestion.val('https://stackoverflow.com/questions/8028957/headers-already-sent-by-php');
var e = $.Event('keydown', { keyCode: 64 });
$dupeQuestion.trigger(e);
如前所述,这是有效的。链接将插入到文本框中,Stack Overflow JS将启动以检索问题。但是,当我尝试在扩展程序中运行完全相同的代码时,它只能起作用:
$(document).on('click', '.cvhelper-dupelist li', function() {
var $dupeQuestion = $('#duplicate-question');
$dupeQuestion.val('https://stackoverflow.com/questions/8028957/headers-already-sent-by-php');
var e = $.Event('keydown', { keyCode: 64 });
$dupeQuestion.trigger(e);
});
有点工作意味着:链接被插入到文本框中,但是用于检索问题的Stack Overflow脚本并没有启动。所以我完全无能为力。使用console vs contentcript时,或许在某处存在差异?还有什么吗?
我已经在github上使用非常简化的扩展版本创建了a download。
答案 0 :(得分:0)
可能的原因之一是您的内容脚本在其他脚本加载之前执行,并且搞砸了其他内容。如果是原因,请尝试:
"content_scripts": [
{
"run_at": "document_end",
"js": ["jquery.js", "myscript.js"]
}
]
它可能会奏效,但我真的不知道。 :/
尝试一下,看看它是否已修复。
答案 1 :(得分:0)
好的,这是唯一可以想到的事情:
$(document).on('click', '.cvhelper-dupelist li', function() {
var $dupeQuestion = $('#duplicate-question');
$dupeQuestion.val('http://stackoverflow.com/questions/8028957/headers-already-sent-by-php');
setTimeout(function() {
var e = $.Event('keydown', { keyCode: 64 });
$dupeQuestion.trigger(e);
}, 1);
});
在尝试触发keyDown之前,它基本上会让点击处理程序完成。