Twitter 用户脚本会影响除预期 (@included) 页面之外的页面吗?

2023-11-29

下面的用户脚本适用于我自己的 Twitter 个人资料页面(而不是时间线)。

// ==UserScript==
// @name            CoolScript
// @include         https://twitter.com/IJNanayakkara
// @include         https://twitter.com/IJNanayakkara/status/*
// @require         http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
// @require         https://gist.github.com/raw/2625891/waitForKeyElements.js
// @version         1.0
// @license         GPL v3 or any later version (http://www.gnu.org/copyleft/gpl.html)
// @grant           GM_addStyle
// ==/UserScript==

function prependToTweet(jNode) {
    jNode.prepend("Hello World ");
}

waitForKeyElements("p.js-tweet-text", prependToTweet);

它的作用是将给定的文本字符串附加到页面中每条推文的开头。

尽管脚本满足了我的要求,但我面临两个问题。

1. 脚本影响除中定义的页面之外的页面@include.

我安装脚本并转到我的 Twitter 个人资料。所有的推文都有你好世界字符串添加到开头。这是预料之中的。

enter image description here

但后来我进入我的时间线页面,那里的所有推文也都有你好世界附加到它们的字符串这不是预期的行为。

enter image description here

我需要知道为什么会发生这种情况。


2. 你好世界字符串 字符串重复自身。

假设我单击一条推文以在单个页面中查看它。工作正常。

enter image description here

然后我回到我的个人资料页面。

enter image description here

如果我转到其他页面并再次返回,该字符串会再次重复。

enter image description here

这是我面临的两个问题。我认为这些问题是由于 AJAX 造成的,但我无法找到解决方法。


似乎发生了一些事情:

  1. 当 twitter 更改为“新”页面时,它有时会保留修改后的文本,但会丢弃原来的 jQuery 数据waitForKeyElements用于跟踪节点。

  2. 当导航到“新”、“不需要的”页面时,由于没有页面加载,脚本不会重新触发,旧的页面waitForKeyElements仍然活跃。

  3. 如果您从不想进行调整的页面开始,然后导航到您想要进行调整的页面,则脚本不会触发,因为 twitter 只是显示了一个新 URL,它实际上并未加载太多任何内容。

  4. Twitter 正在加载 iframe,并且脚本也在这些 iframe 上触发。


为了解决这些问题,我们:

  1. 还可以通过硬属性跟踪更改的节点——twitter 不会丢弃该属性。
  2. 改变@include开火https://twitter.com/*然后使用location.pathname进一步完善这一点。
  3. 停用waitForKeyElements当 AJAX 访问不需要的页面时。
  4. Monitor <title>更改作为检测“新”页面的可靠方法。
  5. Use @noframes.

所以,这个脚本应该更适合你(只在 Greasemonkey 上测试过,但是should在 Tampermonkey 上工作):

// ==UserScript==
// @name            Twitter: Modify tweets on select pages.
// @include         https://twitter.com/*
// @require         http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
// @require         https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant           GM_addStyle
// @noframes
// ==/UserScript==
var tweetSelector = "p.js-tweet-text";

function fireMainCode () {
    /*--- Only fire on desired pages. This fires on:
        twitter.com/IJNanayakkara*
        twitter.com/IJNanayakkara/status/*
    */
    if (/^\/IJNanayakkara(\/status\/)?/.test (location.pathname) ) {
        if ( ! this.WFKE_fired) {
            waitForKeyElements (tweetSelector, prependToTweet);
            this.WFKE_fired = true;
        }
    }
    else {
        //--- Undesired page, shut off waitForKeyElements
        if (this.WFKE_fired) {
            this.WFKE_fired = null;
            var controlObj      = waitForKeyElements.controlObj  ||  {};
            var controlKey      = tweetSelector.replace (/[^\w]/g, "_");
            var timeControl     = controlObj [controlKey];
            if (timeControl) {
                clearInterval (timeControl);
                delete controlObj [controlKey]
            }
        }
    }
}
fireMainCode ();

function prependToTweet (jNode) {
    var altDoneFlag = jNode.attr ("data-altdoneflag");
    if ( ! altDoneFlag) {
        jNode.prepend ("XXXXX => ")
        .attr ("data-altdoneflag", "yes");
    }
}

/*--- Twitter uses some pretty screwy AJAX to "change" pages, but it at least
    changes the title. So listen for that to (re) trigger waitForKeyElements.
*/
var myObserver  = new MutationObserver (titleChangeDetector);
var obsConfig   = {
    //-- Subtree needed.
    childList: true, characterData: true, subtree: true
};

myObserver.observe (document, obsConfig);

function titleChangeDetector (mutationRecords) {
    mutationRecords.forEach ( function (mutation) {
        //-- Sensible, Firefox
        if (    mutation.type                       == "childList"
            &&  mutation.target.nodeName            == "TITLE"
        ) {
            fireMainCode ();
        }
        //-- WTF, Chrome
        else if (mutation.type                      == "characterData"
            &&  mutation.target.parentNode.nodeName == "TITLE"
        ) {
            fireMainCode ();
        }
    } );
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Twitter 用户脚本会影响除预期 (@included) 页面之外的页面吗? 的相关文章

  • 加载 Ember.View 的内容后初始化 jQuery 插件

    DEBUG Ember VERSION 1 0 0 rc 6 ember js DEBUG Handlebars VERSION 1 0 0 rc 4 ember js DEBUG jQuery VERSION 1 9 1 控制器是一个Em
  • 在浏览器上录制视频并上传到LAMP服务器

    我已经尝试了很多东西 red5 jquery 网络摄像头 html5 但这些解决方案都没有录制视频并准备好上传到服务器 无论如何 html5 flash 等等 更好的跨浏览器解决方案 最好的 上传视频 音频 并将结果上传到服务器 我猜是通过
  • 响应式菜单:悬停子菜单显示错误

    简而言之 我根据教程创建了一个响应式菜单 当您将鼠标悬停在投资组合按钮上时 菜单应该显示子菜单 而在移动模式下 您需要按该按钮才能显示子菜单 效果很好 问题是该教程有一个错误 如果您在桌面模式下按组合按钮 子菜单将不会再次显示 除非您按 单
  • 如何在 jQuery 中检查复选框是否被选中?

    我需要检查checked复选框的属性 并使用 jQuery 根据选中的属性执行操作 例如 如果age复选框被选中 然后我需要显示一个文本框来输入age 否则隐藏文本框 但下面的代码返回false默认情况下 if isAgeSelected
  • 如何仅在第一次访问时弹出模态窗口

    我有一个模式窗口 当您访问某个页面时会弹出 访客必须选择我同意或我不同意 我需要一个漂亮的小 jquery 脚本 它会记住谁之前访问过该页面并同意 这样他们每次访问该页面时就不会弹出模式 有人可以推荐一个好的脚本来使用吗 这是代码 div
  • 如何使用 jQuery 获取表格单元格值?

    我正在尝试找出如何使用 jQuery 获取每行表格单元格的值 我的桌子看起来像这样 table tr th Customer Id th th Result th tr tr td 123 td td td tr tr td 456 td
  • jQuery:如何引用类名带有句点的 HTML 元素?

    我这样有几个元素 td class sede co uk 我想这样使用 jquery 引用它们 td sede co uk 但 jquery 没有 找到 它们 因为 我猜 co 和 uk 之间的点 任何想法 Regards Javi You
  • 智能位置表单字段

    我的用户注册表单上有一个文本字段location 我本质上希望这个字段能够根据 Google 地图 或同等地图 进行验证 只允许有效位置通过 最好采用类似的格式滑铁卢 伦敦 or 伦敦 英国 要求 除了位置名称之外 我还想返回该位置中心的坐
  • 谷歌闭包编译器和jquery

    我将 js 代码复制粘贴到谷歌编译器中 当我将其复制回我的应用程序时 它不起作用 我意识到我的代码需要jquery 所以我将jquery代码和我的代码复制到google编译器中 希望它能轻松解决问题 但它也不起作用 在chrome下 代码有
  • 启动 Twitter 应用程序 [重复]

    这个问题在这里已经有答案了 可能的重复 Twitter 应用程序的 Android Intent https stackoverflow com questions 2077008 android intent for twitter ap
  • 有什么方法可以在不重新加载的情况下更改标头 URL? [复制]

    这个问题在这里已经有答案了 可能的重复 修改URL而不重新加载页面 https stackoverflow com questions 824349 modify the url without reloading the page 使用新
  • jQuery 单属性、带过滤器的多值选择器

    Images var boxlinks a href filter href png href gif href jpg href jpeg 有没有更有效的方法来使用 jQuery 中的过滤器选择单个属性的多个值 这里我尝试仅选择带有图像作
  • 如何使用javascript隐藏div

    我想使用 Javascript 隐藏一个 div 下面是我的div div class ui dialog titlebar ui widget header ui corner all ui helper clearfix span cl
  • 如何使用 jQuery UI Sortable 正确相交?

    这是我对 jQuery UI Sortable 进行动画处理的尝试 https codepen io anon pen YdMOXE https codepen io anon pen YdMOXE var startIndex chang
  • 使用 jQuery 解析无效的 HTML,而不添加到 DOM?

    我正在开发一个使用 HTML 模板的 jQuery 插件 最终用户可以传入一个最简单级别的模板 如下所示
  • 本地 401 工作,临时服务器得到 302

    我可能不会获得帮助第一次尝试所需的所有信息 但我会尽我所能 并在我们进行过程中对其进行编辑 我有一个使用 Spring Security Core 插件的 Grails 1 3 7 应用程序 我正在编写处理会话超时和 ajax 请求的代码
  • 是否可以让 webpacks System.import 使用 ajax (用于进度事件)?

    所以我刚刚更新到 webpack 2 并进行了第一个工作设置 其中 webpack 通过查看 System import 调用自动创建块 相当甜蜜 但是 我使用 ajax 调用加载初始块 以便我可以加载时显示进度 https stackov
  • 附加元素在 IE11 中不起作用

    在构造函数中我创建一个元素 var this legendElement this compileLegend 后来我想在事件监听器中使用它 var takeControl function this element empty this
  • 右列固定的 Div 表

    我最近接手了一个非营利网站作为一个项目 我正在使用一个现有的网站 所以我必须使用很多已经编程的东西 所以我所要做的就是创建设计 I made a diagram of basically what I can t figure out ho
  • 当 p:ajax event=change 时,如何禁用 selectOneMenu 上所需的标记?

    这是我的配置 PrimeFaces 4 0 4 精英 OmniFaces 1 6 3 JSF MyFaces 2 0 2 服务器 WebSphere 8 5 0 2 一些代码 为了更清楚我只发布相关部分

随机推荐

  • plt。在子图中仅适用于一个图

    我是 python 新手 所以我希望我的问题足够好 我正在尝试根据两个不同的数据框创建两个子图 我的问题是 当我尝试定义标题和 xlim 时 它仅适用于一个图 这是我的脚本 fig axes plt subplots 1 2 figsize
  • Android Camera2 API 拉伸预览

    我正在使用 Google 示例项目 但如果不拉伸它 我似乎无法让预览正常工作 public void setAspectRatio int width int height if width lt 0 height lt 0 throw n
  • 如何消除 Jquery 中的冲突?

    我是 JQuery 新手 我在我的页面中使用了 2 个 jQueries 对于第一个 JQuery 我的脚本是这样的 现在 当我像这样使用第二个 jQuery 时 我丢失了第一个 jQuery 无法加载
  • Clearcase:将子分支移动到主分支

    在clearcase中 我开始在一个名为的分支上工作main release4 release5 在我开始工作后 release4 被合并到 main 中 我的同事开始开发 main release5 无论如何我可以移动我的main rel
  • 如果两个可能条件中的任何一个成立,则 maven-antrun-plugin 跳过目标

    我可以通过以下方式将两个属性 A 和 B 传递给 maven mvn test DA true or mvn test DB true 如果定义了 A 或 B 我希望跳过目标 我发现当只考虑A时这是可能的
  • 删除Delphi中标签之间变量子字符串的所有实例

    我正在将 HTML 中的可读文本提取到字符串中 并且需要删除之间的现有文本标签 实现这一目标最有效的方法是什么 现在我正在这样做 function RemoveIEScripts const s string string var i In
  • 如何在 Linux Mint 上防止一致的 java 暂停模式

    我有一个在 Linux Mint 上运行的 Java 应用程序 每一分钟 程序都会显示出非常明显的减慢 暂停 停顿时间持续 3 到 4 秒 当我们运行同一程序的更多实例时 它们也会每分钟暂停 3 到 4 秒 每个节目在一分钟的不同秒停止 最
  • 通过 Google Apps 帐户通过 C# 发送电子邮件

    我有一个标准的 Google Apps 帐户 我已通过 Google Apps 设置了自定义域 当我使用 Gmail 界面时 我能够通过 Google Apps 成功发送和接收电子邮件 但是 我想通过代码发送电子邮件 为了尝试这个 我一直在
  • 运营转型库?

    我正在寻找一个库 它允许我在多个用户之间实时同步文本 ala Google Docs 我偶然发现了运营转型 它似乎符合我的需求 话虽如此 我了解 OT 的要点 但不了解 OT 的数学或实施 因此 我想知道是否有一个拖放 JavaScript
  • 如果不可用,Schema.org dateModified 是否应该有一些默认值?

    对于 Schema orgArticle我收到错误https developers google com structured data testing tool for dateModified 建议使用 dateModified 字段
  • 搞乱编码和 XslCompiledTransform

    我正在搞乱编码 一方面 我有一个以 UTF 8 格式响应我的 url 我非常确定 感谢 firebug 插件 我使用以下代码打开读取 UTF 8 格式内容的 url StreamReader reader new StreamReader
  • 姜戈 CSRF 403

    获取 CSRF 403 下面的 console log 语句确认我正在获取令牌 我正在将请求提交到本地服务器上的同一域 internal csrfToken cookie csrftoken internal csrfSafeMethod
  • 使用线程调用 Py_Finalize 时出现 AssertionError(仅限 3.X)

    当我从与 python 调用不同的 C 线程调用 C API 的 Py Finalize 时 我收到错误输出 我看到的错误是 Exception ignored in
  • 使用 Mockito 匹配特定类型的空列表

    我有一个需要一些参数的方法 其中之一是某个类的 List 并且 null 是该参数的可接受值 public void doStuff String string Nullable List
  • 将参数传递给重写的 OnEndPage 方法

    我需要将参数传递给 OnEndPage 方法的重写版本 当我声明该参数时 我没有收到任何错误 但当我调用该方法时 它告诉我 无法将 void 隐式转换为 itextsharp text pdf ipdfpageevent 这是我的 OnEn
  • 配置 SQL*Plus 以仅返回数据

    我需要编写一个简单的 shell 函数 该函数从 Oracle DB 返回单个字段 举例来说SELECT ABC FROM dual ABC就是我所追求的 这是我的功能 function getSomeOraVal sqlplus USER
  • VBA有ATan2函数吗?

    我想计算一下atan2在 VBA 中 但我不确定该函数是否存在 或者甚至不确定在哪里可以找到内置 VBA 函数的规范列表 我没有使用 Excel 因此无法调用工作表 I could 实施 atan2我自己 但如果可能的话我宁愿避免这样做 正
  • 在 PHP 5.4 中禁用严格标准

    我目前在 php 5 4 上运行一个网站 在此之前我在 5 3 8 上运行我的网站 不幸的是 php 5 4 结合了E ALL and E STRICT 这意味着我之前的设置error reporting现在不起作用 我之前的值是E ALL
  • 如何阻止Spring Boot添加会话cookie?

    我有一个 Spring Boot Web 应用程序 我正在尝试将其设为无状态 在我的 WebSecurityConfigurerAdapter 中我设置了 http sessionManagement sessionCreationPoli
  • Twitter 用户脚本会影响除预期 (@included) 页面之外的页面吗?

    下面的用户脚本适用于我自己的 Twitter 个人资料页面 而不是时间线 UserScript name CoolScript include https twitter com IJNanayakkara include https tw