Javascript在控制台中工作,但不在内容中

时间:2012-06-09 23:12:14

标签: javascript jquery google-chrome-extension content-script

这是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

2 个答案:

答案 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之前,它基本上会让点击处理程序完成。