我一直在网上搜索几天,试图找出如何编写自己的脚本,比"Hello World"脚本更复杂.
我在很大程度上理解如何使用firebug找到特定元素(我有Firefox).我理解元数据以及如何做到这一切.
然而,我不明白我应该如何在页面中得到任何我想要的东西.无论是Facebook或其他网站的链接或标签.
任何人都可以帮我获得一个完整的教程/指南,这个教程/指南是最新的,易于理解的全部编剧初学者?
我正在尝试使用用户脚本更改页面中的变量.我知道在源代码中有一个变量
var smilies = false;
Run Code Online (Sandbox Code Playgroud)
从理论上讲,我应该能够改变它:
unsafeWindow.smilies = true;
Run Code Online (Sandbox Code Playgroud)
但它不起作用.当我试图警告或将变量记录到控制台而没有劫持时,我得到它是未定义的.
alert(unsafeWindow.smilies); // undefined !!!
Run Code Online (Sandbox Code Playgroud)
编辑:如果它改变了什么,我正在使用Chrome ...
http://code.google.com/chrome/extensions/content_scripts.html说:
内容脚本在称为孤立世界的特殊环境中执行.他们可以访问注入页面的DOM,但不能访问页面创建的任何JavaScript变量或函数.它将每个内容脚本视为在其运行的页面上没有执行其他JavaScript.
这是关于Chrome扩展,但我猜这与用户脚本也是一样的?
谢谢你,Rob W.所以需要它的人的工作代码:
var scriptText = "smilies = true;";
var rwscript = document.createElement("script");
rwscript.type = "text/javascript";
rwscript.textContent = scriptText;
document.documentElement.appendChild(rwscript);
rwscript.parentNode.removeChild(rwscript);
Run Code Online (Sandbox Code Playgroud) 我想在Firefox中为Greasemonkey创建一个用户脚本而不使用jQuery,它可以在加载网站页面时用新文本替换旧文本.
HTML代码:
..
window.app = profileBuilder({
..
"page": {
"btn": {
"eye": "blue",
"favorite_color": "blue",
"gender": "male",
},
},
..
});
..
Run Code Online (Sandbox Code Playgroud)
用"红色"代替"喜欢"颜色的"绿色","蓝色",用"女性"代替"男性".
当页面将被加载时,我想看到,例如绿色(不是蓝色)的眼睛和女性性别(不是男性).
我想我需要使用下一个功能:
GM_getValue()
GM_setValue()
JSON.parse()
JSON.stringify()
Run Code Online (Sandbox Code Playgroud)
PS:代码JSON直接在页面中而不在文件中(../code.json)
用户代码:
// ==UserScript==
// @name nemrod Test
// @namespace nemrod
// @include http*://mywebsite.com/*
// @version 1
// ==/UserScript==
var json = {"page": {"btn": {"eye": "blue","favorite_color": "blue","gender": "male",},},};
var stringified = JSON.stringify(json);
stringified = stringified.replace(/"eye": "blue"/gm, '"eye": "green"');
stringified = stringified.replace(/"favorite_color": "blue"/gm, '"favorite_color": "red"');
var jsonObject = JSON.parse(stringified);
Run Code Online (Sandbox Code Playgroud)
它不起作用
有人可以帮助使用正确的代码吗?
我使用JavaScript为Chrome编写了一个用户脚本扩展程序,以防止在页面加载时自动下载视频和音频标记
这是代码:
var videoTags = document.getElementsByTagName("Video");
var i;
for(i=0; i<videoTags.length; i++)
{
videoTags[i].setAttribute("preload", "none");
videoTags[i].removeAttribute("autoplay");
}
var audioTags = document.getElementsByTagName("audio");
var i;
for(i=0; i<audioTags.length; i++)
{
audioTags[i].setAttribute("preload", "none");
audioTags[i].removeAttribute("autoplay");
}
Run Code Online (Sandbox Code Playgroud)
这是manifest.json文件:
{
"content_scripts": [ {
"exclude_globs": [ ],
"exclude_matches": [ ],
"include_globs": [ "*" ],
"js": [ "script.js" ],
"matches": [ "http://*/*", "https://*/*" ],
"run_at": "document_start"
} ],
"converted_from_user_script": true,
"description": "",
"key": "an2xaeZJluPfnpmcsHPXI4aajQPL1cBm5C2kKjaQwXA=",
"name": "test.user.js",
"version": "1.0"
}
Run Code Online (Sandbox Code Playgroud)
问题是我的脚本片刻后运行,直到那时浏览器(Chrome)下载了一部分视频/音频文件.
如何使用greasemonkey脚本/ Chrome的用户脚本拦截正在运行的websocket通信?
我的目标是为浏览器内游戏提供额外的统计信息
Greasemonkey可以删除给定域中的cookie吗?如果是这样,怎么样?
我喜欢在我不拥有或控制的页面上运行自定义脚本.很多时候,这些页面都动态创建了我想要应用函数的内容.
这可能吗?如果是这样,我该怎么做?理想情况下,我正在寻找一些实时jQuery的live方法,除了它不是绑定一个事件,就像click它更像是在DOM中加载元素时发生的事件. load事件对某些元素有效,但我不认为...
对于此问题,假设您无法查看或更改插入DOM节点的代码.我想要一种可以在用户脚本或书签中使用的技术,可以跨多个不相关的站点使用.
编辑:我正在寻找在我的反转颜色bookmarklet上使用的东西:JavaScript:在页面的所有元素上反转颜色
在我的脚本顶部,我有以下内容:
// ==UserScript==
// @name Test script
// @description testing auto-update
// @namespace http://tampermonkey.net/
// @author newbie
// @version 1.0.0
// @updateURL https://github.com/mygithubaccount/test/raw/master/test.user.js
// @downloadURL https://github.com/mygithubaccount/test/raw/master/test.user.js
// @match http://awebsite.com/*
// @run-at document-end
// @grant GM_getResourceText
// @grant GM_addStyle
// @grant GM_xmlhttpRequest
// @grant GM_getResourceURL
// @grant GM_xmlhttpRequest
// ==/UserScript==
Run Code Online (Sandbox Code Playgroud)
请注意,这些值仅作为示例。
当我对脚本进行更改并增加 github 上的版本号,然后将更改推送到 master 时,它会更新原始脚本链接,但是我没有从 Tampermonkey 获得自动更新,就像在弹出窗口中说脚本有更新一样。只有当我手动转到链接并重新安装脚本以更新它时,它才会更新。
如何使用弹出窗口进行此自动更新?
我在浏览器调试器的打开文件...框中找不到我的用户脚本(名称定义在// @name)。
似乎Annarfych 的回答和Hjulle对如何使用 Firebug 扩展调试 Greasemonkey 脚本的回答?不要再工作了。
由于迈克尔对Greasemonkey 脚本文件夹丢失的发现?
显然 GreaseMonkey 不再
gm_scripts为 Firefox存储用户脚本。[...] 脚本显然存储在 SQLite 数据库文件中。
当我无法访问原始源代码时,如何使用用户脚本(例如 Tampermonkey 注入的代码)修改 React 组件而不破坏应用程序?
直接修改 React 组件的 DOM 可能会破坏应用程序,因为协调算法可能会因手动 DOM 更改而感到困惑。因此,我想修改我的用户脚本中的 React 组件,以便 React 可以不受阻碍地继续渲染。
在一个简单的设置中,React 会发现全局命名空间中的组件,我们可以轻松修改组件(请参阅此小提琴以获取工作示例):
oldComponent = Component
function Component(props) {
// modify the props to change the appearance of the component
return oldComponent(modifiedProps);
}
Run Code Online (Sandbox Code Playgroud)
然而,部署应用程序时情况会更加复杂,因为组件通常使用webpack进行捆绑。我如何能够在组件已捆绑的应用程序中重现上面的示例?
userscripts ×10
javascript ×7
greasemonkey ×3
tampermonkey ×3
firefox ×2
bookmarklet ×1
cookies ×1
debugging ×1
dom ×1
firefox-57+ ×1
html ×1
jquery ×1
json ×1
reactjs ×1
replace ×1
webpack ×1
websocket ×1