从Firefox 57开始过时。根据需要使用[greasemonkey-4]或[tampermonkey]。如果使用其他浏览器用户脚本引擎,请使用[userscripts]。
我有一个 Greasemonkey 用户脚本,它在任务队列上运行。该队列是一堆序列化的 JSON 对象,分散在脚本私有首选项空间中,可以通过 GM_getValue 访问,
如何使用greasemonkey脚本阻止特定的url或.js文件执行? (客户端)
我想停止 javascript .js 以使用 Greasemonkey/violentmonkey scrpit 加载到特定网站 https://cdn.jsdelivr.net/gh/s9e/[email protected]/loader.min.js 这是加载的脚本
新的greasemonkey用户,我已经整理了这段代码来检查一个名为isRegex的框...但是复选框代码被跳过 console.log("猴子脚本"); var chkBox,regBox; var sQuery = "/...
greasemonkey 是 Google Chrome 的内置扩展吗?
我正在尝试greasemonkey 和Google 的Chrome 扩展。并发现Chrome似乎使用了与GM相同的API名称。 (我好像也有同样的毛病……) 只是想知道是否有油脂...
当脚本编译为附加组件时,GM 脚本中使用的配置值(GM_setvalue 和 GM_getvalue)会发生什么情况?如果 Greasemonkey 不是……,它们存储在哪里
我有一个 Greasemonkey 脚本,并且我正在使用 Greasemonkey 到 xpi 编译器 我使用这个脚本: // ==用户脚本== // @name 测试脚本 // @作者布拉 // ==/用户脚本== var 主 =
Greasemonkey Uncaught ReferenceError:initScript 未仅在 Chrome 中定义
下面的代码,Greasemonkey 脚本,适用于 Firefox 和 Opera。当打包用于 Safari 时,它也可以正常工作。然而,当在 Chrome 中运行时,我得到 Uncaught ReferenceError: initScript is not Defined。
该脚本添加了视频的下载链接(在特定站点上)。下载时如何将文件名更改为其他名称? 示例网址: “http://website.com/video.mp4” 我的例子...
如果 Greasemonkey 脚本运行函数,然后使用 window.location.assign() 导航到新页面,是否有办法保持这些函数运行,而不需要重新加载整个脚本...
我坚持以最干净的方式来完成两位正则表达式。 到目前为止我想出的每一个解决方案似乎都很笨拙。 示例文本 匹配:选择: blah blah blah 123 代表 100 个字符,这个
我正在开发一个 Tampermonkey/Greasemonkey 脚本,该脚本将一个新列添加到此页面 https://www.fangraphs.com/leaders/major-league 上的表中。 我有一个工作版本,添加了列和它
我正在通过外部服务使用 HTML 文档页面,该服务在 HTML 页面中呈现 JSON 片段。 HTML 源代码如下所示: { “产品链接”:“https://example... 我正在通过外部服务使用HTML文档页面,该服务在HTML页面中呈现JSON片段。 HTML 源代码如下所示: <pre>{ "product-link": "https://example.com/product-link", "teaser_image": "https://example.com/teaser-image", "product_image_first": "https://example.com/product-image-first", "headline": "Example headline", }</pre> JSON 块呈现 没有 语法突出显示。 由于我不控制外部服务,我想通过用户脚本将语法突出显示(颜色)应用于 JSON 片段。 我找到了Greasemonkey,但仍然缺少如何注入语法荧光笔库的要点。 感谢 xander 这是我基于 code-prettify 的用户脚本的第一个工作版本: (function(d) { stylizePreElements = function() { var preElements = document.getElementsByTagName("pre"); for (i = 0; i < preElements.length; ++i) { var preElement = preElements[i]; preElement.className += "prettyprint"; } }; injectPrettifyScript = function() { var scriptElement = document.createElement('script'); scriptElement.setAttribute("src", "https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js"); document.head.appendChild(scriptElement); }; stylizePreElements(); injectPrettifyScript(); })(document) 谢谢你让我的一天变得更加美好! 跟进这个答案,如果您在格式化运行后更改元素的文本内容,PR.prettyPrint();将不会重新格式化它。 Code-prettify 将类 prettyprinted 添加到其格式化为标记的元素中,以便不重新处理它们。 以下是更改内容后删除标记的示例: const url = "https://jsonplaceholder.typicode.com/posts"; fetch(url) .then(response => { if (!response.ok) { throw Error(response.statusText); } return response.text(); }) .then(data => { const pre = document.querySelector("pre"); pre.textContent = data; pre.classList.remove("prettyprinted"); PR.prettyPrint(); }) .catch(err => console.error(err)); body, pre { overflow: scroll; margin: 0; } <script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js?skin=sons-of-obsidian"></script> <pre class="prettyprint">{"foo": 42}</pre> 如果您不是可用样式的忠实粉丝,请考虑hljs。
如何在 Chrome 中模仿 Greasemonkey/Firefox 的 unsafeWindow 功能?
我现在只是在 chrome 中摆弄用户脚本,所以请容忍我潜在的无知/白痴。 在我正在为其编写脚本的页面中,有一个 元素声明...</desc> <question vote="7"> <p>我现在只是在 chrome 中摆弄用户脚本,所以请容忍我潜在的无知/白痴。</p> <p>在我正在为其编写脚本的页面中,有一个 <pre><code><script></code></pre> 元素声明了一个变量 <pre><code>x</code></pre>。 这是否意味着,在我的用户脚本中,我只能从全局命名空间访问<pre><code>x</code></pre>?</p> <p>例如,如果我的用户脚本中的唯一行是 <pre><code>alert(x);</code></pre>,它是否应该按预期工作(假设 <pre><code>x</code></pre> 是一个字符串)?我知道 chrome 不支持 unsafewindow,但由于某种原因,我发现不可能弄清楚如何模仿该功能。还可能吗?</p> </question> <answer tick="false" vote="13"> <p>这将为您提供对窗口对象的引用(如 p):</p> <pre><code>var p = unsafeWindow; if(window.navigator.vendor.match(/Google/)) { var div = document.createElement("div"); div.setAttribute("onclick", "return window;"); p = div.onclick(); }; </code></pre> </answer> <answer tick="false" vote="11"> <p><strong>更新:</strong><br/> <pre><code>onclick</code></pre> 漏洞在最新的 Chrome 版本中不再起作用。</p> <p>要在 Chrome 中获得 <pre><code>unsafeWindow</code></pre> 功能,最好的选择是安装并使用 <a href="https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo" rel="nofollow noreferrer">Tampermonkey</a> ——无论如何,你应该明智地这样做。 Tampermonkey 完全支持 Greasemonkey API,并且脚本管理更加简单。</p> <p>Greasemonkey 脚本和 Tampermonkey 脚本几乎总是完全兼容,但对于普通 Chrome 用户脚本来说并非如此。</p> <p>放弃 Tampermonkey,唯一仍然有效的替代方案是使用某种形式的 <a href="https://stackoverflow.com/a/13485650/331508">脚本注入</a>。</p> <p><br/></p> <hr/> <p><strong>以下内容现已过时:</strong> </p> <p><a href="https://stackoverflow.com/a/10828021/331508">Chrome 现在为用户脚本/内容脚本<pre>定义了 </pre><code>unsafeWindow</code></a>,但 Chrome 的 <pre><code>unsafeWindow</code></pre> 仍然不允许访问目标页面创建的 JS 对象。</p> <p>以下是如何提供适当的不安全,<pre><code>unsafeWindow</code></pre>——以跨浏览器的方式,使用<a href="https://stackoverflow.com/a/1294765/331508"><em>特征检测</em>(好)与<em>浏览器嗅探</em>(坏)</a>:</p> <pre><code>/*--- Create a proper unsafeWindow object on browsers where it doesn't exist (Chrome, mainly). Chrome now defines unsafeWindow, but does not give it the same access to a page's javascript that a properly unsafe, unsafeWindow has. This code remedies that. */ var bGreasemonkeyServiceDefined = false; try { if (typeof Components.interfaces.gmIGreasemonkeyService === "object") { bGreasemonkeyServiceDefined = true; } } catch (err) { //Ignore. } if ( typeof unsafeWindow === "undefined" || ! bGreasemonkeyServiceDefined) { unsafeWindow = ( function () { var dummyElem = document.createElement('p'); dummyElem.setAttribute ('onclick', 'return window;'); return dummyElem.onclick (); } ) (); } </code></pre> </answer> <answer tick="true" vote="9"> <p><pre><code>contentWindow</code></pre> 在 Chrome 3 中可用,但 <a href="http://groups.google.com/group/chromium-extensions/browse_thread/thread/a4ff886cfecf80ca" rel="nofollow noreferrer">在 Chrome 4 中被删除</a>。 Chrome 4 唯一可能的解决方案:</p> <pre><code>location.href="javascript:(function(){ alert('Hello'); })()" </code></pre> </answer> <answer tick="false" vote="1"> <p>如果您想与页面 JavaScript 交互,则必须将脚本插入页面中。 (当然,除非您想使用本页建议的任何技巧。)我已经编写了一个函数来为我自己的脚本执行此操作,我会将其发布在这里,以防有人想要使用它。</p> <pre><code>/* @description This function will insert the given code as a <script> or <style> block into a page. @param The code to insert; supported types are: JavaScript Function, String (JavaScript), String (CSS). @param2 Optional: The type of code that is inserted. If omitted, "js" is assumed. Possible values are 'js' or 'css'. @return The HTML element that was inserted, or FALSE on failure */ function insert(z,t){ var j,f,x,c,i,n,d d=document c=d.createElement i=d.head.appendChild a=d.createTextNode if(typeof z==='function') j=!0,f=!0; if((t=='js'||!t)&&!f){j=!0,f=!1} if(t=='css'&&!j){x=c('style');x.setAttribute('type','text/css')} if(j){x=c('script');x.setAttribute('type','text/javascript')} if(f) n=a('('+z+')()');else n=a(z) x.appendChild(n) if(x){return i(x)}else{return !1} } </code></pre> <p>几个需要澄清的例子:</p> <pre><code>//Inserting a JavaScript function var func=function(){ stopAds(); startFileDownload(); } insert(func); //Inserting JavaScript as a string var strJS="prompt(\"Copy:\",someVariableAtThePage);"; insert(strJS); //Or with an OPTIONAL 2nd parameter: insert(strJS,'js'); //Inserting CSS var strCSS=".ad{display:none !important} #downloadButton{display:block}"; insert(strCSS,'css');//Specifying 2nd parameter as "css" is required. </code></pre> </answer> <answer tick="false" vote="0"> <p>好的,这是一个想法,您可以使用地址栏注入脚本...</p> <pre><code>javascript:var ElEm = document.createElement("script");ElEm.src='[path_to_script]';document.body.appendChild(ElEm); </code></pre> <p>然后你可以用你的javascript在窗口中运行你想要的任何内容</p> </answer> <answer tick="false" vote="0"> <p>@Johan 的答案中的脚本非常酷且有用。但我需要它并且想看到它<strong>去混淆</strong>。</p> <p>对于那些像我一样想要查看它或以可读格式使用它的人,就在这里。这是 <strong>same</strong> 函数,只是为了清晰起见进行了一些重构。这可能有助于更快地理解甚至分叉:</p> <pre><code>function insert(code, tipo) { let isJS, isFunc, x, n; if (typeof code === "function") { isJS = true; isFunc = true; } if ((tipo === "js" || !tipo) && !isFunc) { (isJS = true), (isFunc = false); } if (tipo === "css" && !isJS) { x = document.createElement("style"); x.setAttribute("type", "text/css"); } if (isJS) { x = document.createElement("script"); x.setAttribute("type", "text/javascript"); } if (isFunc) n = document.createTextNode("(" + code + ")()"); else n = document.createTextNode(code); x.appendChild(n); if (x) { return document.head.appendChild(x); } else { return false; } } </code></pre> </answer> </body></html>
欺骗 xmlhttprequest (greasemonkey)
我阻止了来自greatmonkey的XMLHttpRequest,但是当它没有得到响应时页面会出现错误。所以我尝试欺骗,就好像收到了回复一样。不幸的是,XMLHttpRequest 似乎已读取字段...
我正在尝试使用 JavaScript(使用 Greasemonkey)从我自己的网站中提取数据来自定义另一个网站。我使用的代码如下: 函数 getURL(url, func) { var xhr = 新的 XMLHttpRequ...
我想使用 Firefox 3.5 中引入的 Web Worker 工具来增强我正在开发的 Greasemonkey 脚本。 这可能吗? 我做了一些实验,但我无法通过......
我有一个如下所示的用户脚本: document.querySelector('[title="选择:此选项"]').checked = true document.querySelector('[title="点击继续"]').click() 之后...
使用 JavaScript/GreaseMonkey 存储到文件中
我已经使用 Greasemonkey 从页面捕获了数据列表。 通用汽车脚本 var hit = GM_getValue("hit") || 0; var _url = "http://localhost:8080/test?p=$$pageNo$$"; _url = _url.replace("$$pageNo$$",...
如何使用 GreaseMonkey/ViolentMonkey 从字符串中检索全局上下文变量?
当尝试从 Javascript 中的字符串检索全局上下文(通常是窗口)中定义的变量时,我知道您可以简单地这样做: var 测试变量 = 123; console.log(窗口["testVa...
问题涉及特定网站:NS.nl 上的门票订购。该页面上有一个用于输入电子邮件的文本输入字段,并且该字段已禁用 Ctrl-V(粘贴)。 问题:什么油猴