当前位置: 首页 > 面试题库 >

Chrome扩展程序在Ajax更改上运行内容脚本

莫典
2023-03-14
问题内容

我有一个chrome扩展程序,可以在网站上进行一些更改(编辑评论)。

在站点上进行了最近更改之后(站点不是我的站点)-使用ajax加载了注释块(之前是简单的发布请求,整个页面都重新加载了)。

现在,如果我第一次加载页面-内容脚本可以工作,但是当我转到下一页时,说页面#2-使用ajax添加注释,并且不再运行扩展脚本。所以评论并没有改变我想要的方式。

有没有简单的方法来监听页面更改DOM并再次应用扩展脚本?

在清单文件中,我有:

{
  "name": "Name",
  "version": "1.0",
  "description": "Description",
  "icons": {"16":"16.png",
            "48":"48.png",
            "32":"32.png",
            "128":"128.png"},
  "browser_action": {
    "default_title": "Default title",
    "default_icon": "48.png",
    "popup": "popup.html"
  },
  "permissions": [
    "tabs",
    "http://www.site.com/*",
    "notifications",
    "unlimitedStorage"
  ],

  "options_page": "options.html",
  "background_page": "background.html",

  "content_scripts": [
                {
                    "matches": ["http://www.site.com/*","https://www.site.com/*"],
                    "js": ["jquery-1.7.1.min.js","content.js"],
                    "run_at": "document_end"
                }]
}

问题答案:

您可以在名为的事件上添加一个侦听器DOMSubtreeModified。将一个函数绑定到它,只要有更改,它就会被调用。

在jQuery中:

$('#ContentContainer').bind('DOMSubtreeModified',modifyComments);

更新:

如果事件触发多次,请在第一次时删除事件绑定,并且在一定的超时后,可以调用ModifyComments并重新绑定事件。

function DOMModificationHandler(){
    $(this).unbind('DOMSubtreeModified.event1');
    setTimeout(function(){
        modifyComments();
        $('#ContentContainer').bind('DOMSubtreeModified.event1',DOMModificationHandler);
    },1000);
}

//after document-load
$('#ContentContainer').bind('DOMSubtreeModified.event1',DOMModificationHandler);


 类似资料:
  • 问题内容: 我正在做一个插件来对界面进行一些转换。我不断收到(典型的跨网站问题) 但作为扩展程序,它应该可以访问iframe的内容 … 没有人知道如何访问它的内容以便可以被捕获吗? 问题答案: 通常,没有直接访问其他来源对象的直接方法。如果要在不同框架中的内容脚本之间 安全地 通信,则必须将消息发送到后台页面,该页面又将消息发送回选项卡。 这是一个例子: 的一部分: : : 后台脚本“ bg.js

  • 问题内容: 我正在尝试让我的Chrome扩展程序在加载新页面时运行该功能,但是在尝试了解如何执行此操作时遇到了麻烦。据我了解,我需要在background.html中执行以下操作: 使用来检查时,页面变更 使用运行的脚本。 这是我的代码: 我还想知道init()函数是否可以访问位于其他JS文件中的其他函数? 问题答案: Chrome扩展程序中的JavaScript代码可以分为以下几类: 扩展代码-

  • 问题内容: 我正在尝试从弹出窗口访问activeTab DOM内容。这是我的清单: 我真的很困惑,背景脚本(持久性事件页:false)还是content_scripts是可行的方法。我已经阅读了所有文档和其他SO帖子,但对我来说仍然没有意义。 有人可以解释为什么我可能会用另一个。 这是我一直在尝试的background.js: 我只是从弹出控制台执行此操作: 我越来越: 更新: content.j

  • 问题内容: 因此,对我的问题进行基本描述。 我有一个现在可以正常使用的扩展程序(最终),可以将电话号码包装在一种标签中。 它现在正在运行,但是我遇到了基于用户动作或基于ajax请求通过JS动态加载的任何内容的问题 例如,如果我单击并发送一个Hotmail电子邮件,该脚本将起作用,但仅当我刷新页面时,该电子邮件才能加载并调用我的内容脚本。 我考虑过通过使用户单击扩展程序的图标来解决此问题,但这并不是

  • 问题内容: 我知道如何在Selenium Webdriver中加载Chrome扩展程序。但是我没有看到任何描述如何从Selenium 运行 chrome扩展的帖子/博客。 我需要明确地使chrome扩展程序运行/使其从selenium中执行其功能。例如,我想使用带有Selenium Webdriver的扩展程序清除Chrome浏览器的缓存。 我可以先做吗?还是Selenium WebDriver仅

  • 问题内容: 我正在使用.load()将静态HTML文件拉到我的主HTML页面上。我编写的脚本和选择器存在于: 但是它们不适用于AJAX加载的内容。我读到这是因为我正在使用的选择器不可用。 有一个更好的方法吗?将脚本添加到window.load函数也不起作用: 问题答案: ajaxComplete()