javascript - 当在 document_end 填写表单时,我的脚本单击一个重新加载页面的按钮,以便它再次运行。我如何停止它运行?

标签 javascript google-chrome-extension manifest infinite-loop

我正在编写一个小程序,用脚本自动填充字段。

然后提交表单。

但是,提交表单后,它会重新加载页面并再次运行脚本。

因此,它会无限次添加用户。

理想情况下,我想添加一个用户填写不同的信息,并添加下一个最多 100 个用户。

我不确定如何停止这个无限循环,我假设页面重置时脚本也会重新启动。

我尝试放置一个运行我的脚本的函数,但由于我的脚本在页面加载时运行,即使该函数处于 for 循环中,它也会不停地运行。

它也很难测试,因为无限循环是一个如果不首先运行多次就无法真正解决的问题。

我的 list 代码如下:

{
    "name": "Begginer",
    "version": "1.0",
    "manifest_version": 2,
    "description": "Fill",

//    "permissions": [
//        "activeTab",
//        "*://*/*"
//    ],    

    "content_scripts": [
        {
        "matches": ["website"],
        "run_at": "document_end",   
        "js": ["Fill.js"]
        }
    ],

    "icons":
    {
    "16": "images/puppy16.png", 
    "48": "images/puppy48.png",
    "128": "images/puppy128.png"
    },

    "browser_action":
    {
    "default_icon": "images/puppy128.png"
    }

}

我的JS:

    // define your username and password
    var Nam='Oi Macaco';
    var Gen='M';
    var Nbi='123';
    var Ser='Servico';
    var Dna='01-01-2000';
    var Dab='01-01-2000';
    var Cat='categorai';
    var Dis='Lunda';
    var Ema='email@domain.com';
    var Npa='123';
    var Una='OMacaco';

    // Finds Each Field
    var NameF   = document.getElementById('nome_new');
    var SexoF   = document.getElementById('sexo_new');
    var NbiF    = document.getElementById('num_bi');
    var SerF    = document.getElementById('servico');
    var DnfF    = document.getElementById('data_nasc_func');
    var DadF    = document.getElementById('data_admissao');
    var CatF    = document.getElementById('categoria');
    var DisF    = document.getElementById('distrito');
    var EmaF    = document.getElementById('email_new');
    var PasF    = document.getElementById('password_new');
    var UnaF    = document.getElementById('unamesso_new');

    // Fills the Fields
    NameF.value     = Nam;
    SexoF.value = Gen;
    NbiF.value  = Nbi;
    SerF.value  = Ser;
    DnfF.value  = Dna;
    DadF.value  = Dab;
    CatF.value  = Cat;
    DisF.value  = Dis;
    EmaF.value  = Ema;
    PasF.value  = Npa;
    UnaF.value  = Una;

    //Click Button
    document.getElementById('Button1').click();

一切正常,问题是它运行了无数次。

所以我认为我什至无法添加下一个用户。

一切都是假设,因为很难测试无限循环,我并没有真正期待它。

我想我应该使用 chrome.browserAction.onClicked.addListener(函数回调)

然后我应该创建一个为每个不同用户提供开关的函数。

但这似乎不是最好的方法。

帮助。谢谢。

最佳答案

我通过插入以下代码解决了这个问题:

感谢丹哈珀,

list

{
  "name": "Inject",
  "version": "0.0.1",
  "manifest_version": 2,
  "description": "Injecting stuff",

  "background": {
    "scripts": [
      "background.js"
    ],
    "persistent": true
  },
  "browser_action": {
    "default_title": "Inject!"
  },
  "permissions": [
    "activeTab"
  ]
}

注入(inject).js

(function() {

    // define your username and password
    var Nam='Oi Macaco';
    var Gen='M';
    var Nbi='123';
    var Ser='Servico';
    var Dna='01-01-2000';
    var Dab='01-01-2000';
    var Cat='categorai';
    var Dis='Lunda';
    var Ema='email@somethin';
    var Npa='123';
    var Una='OMacaco';

    // Finds Each Field
    var NameF   = document.getElementById('nome_new');
    var SexoF   = document.getElementById('sexo_new');
    var NbiF    = document.getElementById('num_bi');
    var SerF    = document.getElementById('servico');
    var DnfF    = document.getElementById('data_nasc_func');
    var DadF    = document.getElementById('data_admissao');
    var CatF    = document.getElementById('categoria');
    var DisF    = document.getElementById('distrito');
    var EmaF    = document.getElementById('email_new');
    var PasF    = document.getElementById('password_new');
    var UnaF    = document.getElementById('unamesso_new');

    // Fills the Fields
    NameF.value     = Nam;
    SexoF.value = Gen;
    NbiF.value  = Nbi;
    SerF.value  = Ser;
    DnfF.value  = Dna;
    DadF.value  = Dab;
    CatF.value  = Cat;
    DisF.value  = Dis;
    EmaF.value  = Ema;
    PasF.value  = Npa;
    UnaF.value  = Una;

    //Click Button
    document.getElementById('Button1').click();

    alert('inserted self... giggity');

})();

后台代码:

// listen for our browserAction to be clicked
chrome.browserAction.onClicked.addListener(function (tab) {
    // for the current tab, inject the "inject.js" file & execute it
    chrome.tabs.executeScript(tab.ib, {
        file: 'inject.js'
    });
});

关于javascript - 当在 document_end 填写表单时,我的脚本单击一个重新加载页面的按钮,以便它再次运行。我如何停止它运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57809652/

相关文章:

javascript - 为什么这个极其简单的 Javascript 代码不能工作?

javascript - 为什么 MEAN.js 应用程序的 URL 以 #!

google-chrome - 在 HKCU 中使用 ExtensionInstallForcelist 时,Chrome 扩展程序不会安装

javascript - 基于 Javascript 变量值的多个 SVG 动画的设置时间已经过去

javascript - ng 重复 json 解析显示空字符串

javascript - chrome webrequest api url 数组?

google-chrome-extension - 从弹出窗口发送消息到内容脚本 - Chrome 扩展

java - "Invalid signature file digest for Manifest main attributes"在从源代码构建的 Java 上

google-chrome-extension - 在 chrome 扩展 list v3 中添加 unsafe-inline

java - 使用spring boot loader WarLauncher时如何加载war文件之外的属性文件?