一尘不染

Chrome扩展程序中无法使用jQuery触发点击

javascript

我正在尝试使用一行jQuery代码制作一个Chrome扩展程序,但是它不起作用。我正在尝试触发元素上的点击。

chrome控制台根本不显示任何错误,并且当我仅将jQuery代码放在控制台中时,它可以正常工作。

我的代码:

content.js

$(document).ready(function() {
  $('.like_post:contains(Like)').click();
});

background.js

chrome.windows.getCurrent( function(currentWindow) {
  chrome.tabs.query({active: true, windowId: currentWindow.id}, function(activeTabs){
    chrome.tabs.executeScript(
      activeTabs[0].id, {file: 'jquery-2.1.3.min.js', allFrames: true}
    );
    chrome.tabs.executeScript(
      activeTabs[0].id, {file: 'content.js', allFrames: true}
    );
  });
  console.log(currentWindow.id);
});

manifest.json

{
  "name": "plugin name",
  "version": "0",
  "description": "What do I do as an extension",

  "manifest_version": 2,
  "browser_action": {
    "name": "project with jquery",
    "icons": ["icon.png"],
    "default_icon": "icon.png"
  },
  "content_scripts": [ {
    "js": [ "jquery-2.1.3.min.js", "background.js", "content.js" ],

    "matches": [ "http://*/*", "https://*/*"]
  }]
}

我还下载了jquery-2.1.3.min.js文件,并将其放在扩展文件夹中。

谁能解释为什么它不起作用???


阅读 522

收藏
2020-05-01

共1个答案

一尘不染

问题的根本原因是扩展内容脚本在一个孤立的世界中执行。这样做的原因之一是,您的代码不会与页面的代码冲突:例如,您可以使用其他版本的jQuery。

因此,您的内容脚本具有自己的jQuery副本。jQuery的.click()工作方式是维护由单击触发的事件处理程序列表。

..您可能已经看到问题了。内容脚本的jQuery副本不知道该页面的处理程序副本列表,因此无法触发它们

顺便说一下,这解释了将其放入控制台后为何起作用的原因-
默认情况下,控制台在页面上下文中执行并触发页面的jQuery副本。

有多种方法可以解决此问题,但是您的任务最直接的方法是发出 适当的
DOM事件,该事件将被页面的代码捕获。有关示例,请参见此问题

2020-05-01