问题标签 [userscripts]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 帮助使用户脚本在 chrome 中工作
我为 Gmail 编写了一个用户脚本:Pimp.my.Gmail 并且我也希望它与 Google Chrome 兼容。
现在我已经尝试了几件事,就我的 Javascript 知识(非常薄弱)而言,并且在一定程度上取得了成功,尽管我不确定这是否是正确的方法。
这是我尝试使其在 Chrome 中工作的方法:
我发现的第一件事是它contentWindow.document
在 chrome 中不起作用,所以我尝试了contentDocument
,它有效。
但是我注意到一件事,检查 Firefox 和 Chrome 中的控制台消息,我看到该脚本在 Firefox 中执行了多次,而在 Chrome 中它只执行一次!
所以我不得不放弃这window.addEventListener('load', init, false);
条线并将其替换为window.setTimeout(init, 5000);
,我不确定这是否是个好主意。
我尝试的另一件事是保留window.addEventListener('load', init, false);
线路并window.setTimeout(init, 1000);
在内部使用init()
,以防找不到画布框。
所以请让我知道什么是使这个脚本跨浏览器兼容的最佳方法。哦,我全神贯注于使这个脚本更好/更高效的代码(我确信这是可能的)
编辑:没有帮助...?:'(
4 月 28 日编辑:
我稍微重新编写了代码,现在看起来像这样:
这在 Firefox 中运行良好,但在 Chrome 中,它给了我一个top is undefined
错误。我注意到的另一件事是,如果我删除第一行if(document.location != top.location) return;
,该waitforiframe()
方法会一遍又一遍地被调用。(即我"Finding canvas frame"
在控制台中看到错误)
有人能告诉我第一行是做什么的吗?waitforiframe()
我的意思是它实现了什么以及如果我删除那条线为什么该方法会永远运行?
firefox - 编写一个对域字符串做出反应的 GreaseMonkey 脚本(对于 I18N,例如 cn、en、fr 等)
假设有一个网站支持多种语言:
- cn.mydomain.com 或 mydomain.com/cn 或 mydomain.cn
- en.mydomain.com 或 mydomain.com/en 或 mydomain.com
- fr.mydomain.com 或 mydomain.com/fr 或 mydomain.fr
我想编写一个 GreaseMonkey 脚本,该脚本根据用户加载页面的地址为变量分配不同的字符串/值。你是怎样做的?谢谢
编辑:我意识到我可以使用 JavaScript 来获取地址。GreaseMonkey 本身是否支持这种功能?
jquery - 在 GreaseMonkey 中使用 jQuery 1.4 而原始页面使用 jQuery 1.3(不同版本)?
在用户脚本中提供必要的新版本 jQuery (1.4.2) 的最佳策略是什么,它修改已经具有旧版本 jQuery (1.3.1) 的页面?
最好原始页面继续使用“$”符号,而在我的脚本中它使用由jquery.noConflict()
.
根据这个问题的答案,任何希望加载的额外版本都应该放在原始脚本标签之上。这是我有点困惑的地方,因为我的印象是 GreaseMonkey 在页面加载后执行脚本?
编辑:一个想法是在用户脚本中,为 jQuery 1.4.2 附加一个脚本标签,设置别名,然后再次为 1.3.1 附加一个脚本标签,以免破坏使用 1.3.1 函数的原始页面代码。
但这需要每页加载 jQuery 库 3 次。有没有更好的办法?
编辑 2:看起来原始页面仍然可以使用其 1.3.1 副本,尽管 GM 脚本提供了 1.4.2 副本,但只要我使用新别名 ( gj
) 来引用它们,它们就可以共存1.4.2 里面的 jQuery 对象code142()
。
如果没有其他问题出现,那么这将是我的解决方案。我希望它对可能遇到此问题的其他人有用。
google-chrome-extension - 是否可以通过用户脚本确定 Chrome 是否处于隐身模式?
我之前问过这个问题,但没有说清楚我的意思是在用户脚本中,而不是在网页的 JavaScript 中。所以我现在会更清楚。
是否可以通过用户脚本(基本上是在浏览器中作为扩展程序运行的脚本,而不是在网页上运行的脚本)确定 Google Chrome 是否处于隐身模式?
javascript - 在 Javascript 中使用特殊键进行键控
我想知道是否可以使用 macbook pro 用于音乐控制的特殊键并将它们绑定到 javascript 中?示例键:播放/暂停、下一个、返回。
如果有帮助,我正在尝试这样做来修改greasemonkey脚本。
这是当前代码
javascript - 停止提交表单中的输入字段
我正在编写一些javascript(一个greasemonkey/userscript),它将一些输入字段插入到网站上的表单中。
问题是,我不希望这些输入字段以任何方式影响表单,我不希望在提交表单时提交它们,我只希望我的 javascript 能够访问它们的值。
有什么方法可以在表单中间添加一些输入字段,而在提交表单时不提交它们?
显然,理想的情况是输入字段不在表单元素中,但我希望结果页面的布局让我插入的输入字段出现在原始表单的元素之间。
javascript - 将变量传递到新页面
我正在尝试从一个页面传递一个变量,加载另一个页面并输入该信息。像这样的东西:
当 127.0.0.1/test.html&ID=1234
我无权修改 127.0.0.1/test.html 或 newpage.html 但想将变量从另一个传递给它们。这可能吗?
jquery - 如何在用户脚本中重用目标页面的jQuery?
而不是使用@require
(即特定于 GM)或注入 <script> 元素(例如,对于 0.8 之前的 GM 和其他浏览器),我想使用jQuery
目标页面已经加载和使用的对象。
这种情况是否可行以及如何使其发挥作用?我试过只使用$
orjQuery
但它不起作用。我也尝试过GM_wait
链接文章中提到的-timer-trick,但没有成功。
如果它不起作用,为什么不呢?
javascript - 函数完成或出现 DIV 后运行代码
我为 Facebook 编写了一个用户脚本,它将类似的通知组合在一起。现在,仅使用带有旧通知的静态 HTML 页面,脚本可以 100% 运行。
这就是问题所在:默认情况下保存通知的 DIV 在用户单击通知按钮之前没有通知。Facebook 有一个onclick
显示 DIV(通知菜单)并使用 AJAX 获取通知的内联事件。由于我的用户脚本只在启动时运行,它在那里找不到任何东西——它对页面没有影响。我尝试使用 .click() 事件,但是当您单击通知按钮时,它会运行我的代码。问题是,Facebook 仍在运行它的 AJAX 通知请求,这意味着我的脚本仍然没有通知可以使用,因此它没有任何效果。
我不想使用通用的 setTimeout,因为我不希望用户必须先看到通知,然后突然看到它们。有没有办法监控 DIV,所以一旦添加了通知,它就会运行?或者一旦 Facebook 完成它的 AJAX 请求,它就会运行我的代码?
javascript - 删除匿名事件侦听器
无论如何要删除这样添加的事件侦听器:
不更换元素?