我正在尝试使用一行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文件,并将其放在扩展文件夹中。
jquery-2.1.3.min.js
谁能解释为什么它不起作用???
问题的根本原因是扩展内容脚本在一个孤立的世界中执行。这样做的原因之一是,您的代码不会与页面的代码冲突:例如,您可以使用其他版本的jQuery。
因此,您的内容脚本具有自己的jQuery副本。jQuery的.click()工作方式是维护由单击触发的事件处理程序列表。
.click()
..您可能已经看到问题了。内容脚本的jQuery副本不知道该页面的处理程序副本列表,因此无法触发它们。
顺便说一下,这解释了将其放入控制台后为何起作用的原因- 默认情况下,控制台在页面上下文中执行并触发页面的jQuery副本。
有多种方法可以解决此问题,但是您的任务最直接的方法是发出 适当的 DOM事件,该事件将被页面的代码捕获。有关示例,请参见此问题。