firefox - Firefox:通过扩展从 Javascript 运行函数
问题描述
目前我正在将 Javascript 粘贴到 FF 的控制台中,并从控制台调用函数:
function fill (i){
if(i==1){
SINGLE_START();
}
else if(i==2){
DUAL_START();
}
else if(i==3){
INTEGRATED_START();
}
else{
alert("=======================\n Tool Filler\n=======================\n\n1 or 2");
}
}
它用于抓取网站的内容,例如从网站的某些部分创建文件或生成电子邮件,例如:
function SINGLE_START(){
//Focus:
let d = $(document).activeElement.contentDocument.activeElement.contentDocument.activeElement.contentDocument;
等等
我想,可能有一种方法可以通过扩展来使用它,所以我安装了 Tampermonkey 并将脚本保存为扩展中的用户脚本。但是我有一个问题,即我无法根据需要从脚本中调用所需的函数,而不仅仅是在网站加载时启动脚本。
有谁知道如何从 Tampermonkey(或 Greasemonkey)或任何其他扩展中一一调用函数?
提前致谢!
解决方案
这是因为 Tampermonkey 脚本在孤立的上下文中运行。有两种:
1. 无特殊特权
如果您没有使用任何由 解锁的特殊 GM 功能,@grant GM_doThisAndThat
而是使用@grant none
,那么内部发生的情况是这样的:
function TheScript() {
// Here is your script that you added to tampermonkey
}
TheScript();
如果你在那里有一个函数,它只在脚本中可用。您需要将其显式公开给窗口上下文:
function fill (i){
... code here ...
}
window.myFill = fill;
然后在控制台中编写myFill(42)
,它将执行。
我建议您避免分配fill
给 window ,因为它可能会与某些内容发生冲突,但这取决于您。
2. 特殊特权
如果您正在使用某些 GM 功能,则需要添加@grant unsafeWindow
然后分配给unsafeWindow
变量。小心你这样暴露的东西,你不想让网站访问任何GM_function
功能,因为他们可以访问你在其他网站和你的计算机上的私人数据!
推荐阅读
- r - 如何创建具有 3 个新列(每个列来自不同数据集)的数据集并重命名它们?
- algorithm - 如果我们想最大化 αβ-剪枝的好处,应该如何扩展树?
- android - 代号一号问题:代号一号专业账号订阅到期后,iOS应用中的推送通知服务会怎样?
- scala - SparkMap[RDD] - 映射到Many-One
- php - Doctrine expr - “文字”函数是否在内部使用准备好的语句?
- regex - 我想访问四个 FASTA 文件,从标题行打印有机体名称?
- java - 如何配置 DefaultMessageListenerContainer 仅在我们的 MessageListener 确认时才提交消息?
- javascript - 如何为 passport-azure-ad 生成 privatePEMKey 和指纹
- laravel - 如何使用 laravel 将产品显示到相关类别
- python - 如何在 python 特定的 ValueError 中引发?