问题标签 [ninjakit]

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.

0 投票
1 回答
751 浏览

javascript - Safari 似乎缓存了页面和 DOM 状态

我编写了一个 Greasemonkey javascript,它在 NinjaKit 新的 Safari 用户脚本管理器中运行良好,但是当我尝试使用 Safari 5 扩展构建器编译相同的脚本时,我得到了一些非常奇怪的行为。

该脚本为用户提供了一个选项编辑屏幕,当您单击保存按钮时,该脚本通过 HTML5 localstorage API 将用户首选项保存为 JSON 数据包,然后该脚本关闭选项屏幕并重新加载页面,在页面重新加载时,脚本应该从本地存储中的 JSON 重新加载首选项,并且脚本应该根据新的首选项根据他们所做的设置以用户想要的方式显示页面。

我看到的问题是,当我将它作为扩展程序运行时,当我单击保存按钮时,脚本会重新加载页面,但是当重新加载页面时,用户对设置所做的更改不会应用于页面。奇怪的是,如果我通过浏览器刷新按钮再次手动重新加载页面,用户在设置中所做的更改会突然变得明显。所以显然数据已保存到本地存储,但由于某种原因,当页面第一次重新加载时,它以某种方式从缓存文件中重新加载,并且只有在第二次手动重新加载时,新页面才能正确显示。我不明白为什么这在 ninjakit 中可以作为普通用户脚本使用,并且实际上也可以在 Firefox、Opera 和 Google chrome 中使用,它只是不能作为 safari 中的扩展程序,它太烦人了。一世'

顺便说一句,我没有使用本机 safari 扩展设置系统,因为我希望脚本跨浏览器兼容,所以这就是我将设置保存到 localstorage 的原因。

有没有其他人目睹过这种行为?或者有任何线索如何解决这个问题?这让我很精神...

0 投票
2 回答
281 浏览

greasemonkey - 在页面上下文中使用用户脚本 GM_functions

我想通过 XMLHTTPRequest 将特定页面中的所有内容“重新链接”到本地网络域。这将导致我进入 GreaseMonkey/NinjaKit 中的 GM_xmlhttpRequest,除了我想在单击链接运行它,而不是在用户脚本实际运行时运行它......

所以我有类似的东西:

我知道我可以使用 unsafeWindow 或向文档添加脚本元素以注入loadLink函数。 但是如何在 loadLink 中使用GM_xmlhttpRequest呢?

我查看了0.7.20080121.0 兼容性页面,但我不确定这是否符合我的需要......

我还考虑向页面添加iframe,修改后的链接将加载到iframe中(再次触发用户脚本),但我更喜欢更清洁的解决方案......

0 投票
0 回答
390 浏览

safari - 阻止 Gmail 使用用户脚本窃取焦点

我试图阻止 Gmail 使用用户脚本窃取焦点。我在 safari 上使用 NinjaKit。到目前为止我有

但是窗口仍然设法窃取焦点。

如果我注释掉警报行,我可以看到它确实在激活用户脚本:警报弹出(很多次)。

通过打开mail.google.com/然后快速切换到新选项卡来测试它。Gmail 在后台加载,然后切换回焦点,从另一个选项卡中窃取它。

0 投票
1 回答
16756 浏览

google-chrome - 使用 GM_xmlhttpRequest 在 Chrome 上发布数据?

我正在编写一个用户脚本来从页面中获取图像,并将其上传到服务器。该脚本在 FF(Greasemonkey 和 Scriptish)中运行良好,但是当我使用 Chrome(使用 Tampermonkey 或 Ninjakit)时,它不发送数据,而是发送字符串 * [object Object] *。

这是我的脚本:


Tampermonkey 和 Ninjakit 都会发送请求。在 Tampermonkey 中,我得到了响应,在 Ninjakit 中我没有(永远不会调用 onload)。

但是他们不发送用 base64 编码的实际图像 - 当我读取数据时 - 服务器将[object Object]作为 POST 正文(而不是数据正文,我无法让 devtools 网络面板显示由 GM_xmlhttpRequest 发出的请求,所以我在服务器端检查了它)。

0 投票
2 回答
1153 浏览

javascript - 为什么这个 Greasemonkey 脚本不能与这个 jQuery 插件一起工作?

我在 Safari 中使用 NinjaKit(与 Greasemonkey 相同)。代码是这样的

当我访问此页面时,alert可以很好地显示,但是.highlight依赖的功能jQuery.highlight不起作用jQuery。它说:

而且我发现调试这个非常困难..有人对此有想法吗?

0 投票
1 回答
584 浏览

javascript - 检索 Safari 扩展程序创建的数据

所以最近 Safari 升级到 Safari 12,所有不是通过 Extensions API 创建的扩展都不再正常工作。这对我来说很麻烦,因为过去几年我一直在从事一个需要使用不再运行的扩展的项目。有问题的扩展是一个用于创建名为 Ninjakit 的浏览器脚本的扩展,据我所知,它不再以任何形式存在(我最初下载它的网站目前完全不存在),所以它被更新的可能性很小与 Safari 12 兼容。因此,我一直在寻找可以用来制作它的解决方法,以便我可以继续使用扩展。我发现的最佳策略是这篇博文中概述的策略:https ://georgegarside.com/blog/macos/install-any-safari-extension-macos-mojave/. 虽然按照该页面上的说明操作让我能够成功制作它,以便我可以继续使用 Ninjakit,但我用 Ninjakit 编写的所有 200 多个脚本都丢失了(请注意,这些脚本完全是为我个人使用而创建的,因此不是随时上传到互联网)。这对我来说是不可接受的。博客文章确实提供了导入扩展程序旧设置的说明,但是当我尝试按照这些说明进行操作时,我遇到了无法逾越的障碍。有一次,说明说要修改文件 ~/Library/Preferences/com.apple.Safari.Extensions.plist。根据说明,“Root”下有可以修改的数据,但是当我在XCode中打开文件时,“Root”完全是空的。

老实说,我可能还有其他更好的扩展程序可以用于在 Safari(甚至可能是其他浏览器,例如 Chrome)中编写脚本,如果不是因为目前的事实,我真的可以放弃 Ninjakit ,这样做意味着从头开始重写我所有的旧脚本,这根本不可行。由于这些脚本最终都只是 Javascript 代码,我认为 Safari 一定是以某种物理形式将它们存储在我的机器上,但我终其一生都无法弄清楚哪个文件将包含这些数据。我搜索了图书馆和时间机器,但没有成功。如果有人知道我如何重新访问我的旧脚本,我们将不胜感激——即使只是能够将 Javascript 代码复制粘贴到不同的扩展程序中,我也会感到满意。

如果它有助于我的机器尚未升级到 OSX Mojave - 它仍在 OSX High Sierra 上。虽然我不知道确切的版本号(我目前正在从另一台机器上发布此信息),但我可以在必要时轻松检索该信息。