打开 window 并浏览页面

opening window and navigating through page

我正在尝试使用内容脚本浏览网页。但是该函数保留 运行 因为每次页面更改时它都会通过脚本运行。我想知道是否有更好的方法来做到这一点,因为它是一个资源消耗者,并且由于不断刷新而不允许用户与页面交互。

这是有问题的代码,如果看起来很奇怪,请见谅。我对 jQuery.

的了解不超过几周
$(document).ready(function(){
    console.log("Made it here" + window.location.href);

    loc = window.location.href;
    match = loc.match('http://url.com/uc/');
    if (match) {

        window.location = "http://url.com/uc/health/index/1";
        console.log("2 here");

        window.location = "http://url.com/uc/health/communication/createSelectTemplate";

        console.log("3 here");
        chrome.storage.local.get('formOption', function(result) {
            document.getElementById('formTemplate').value = result.formOption;
            document.forms[0].submit();
         });

    }
});

我必须在使用值之前浏览三个 windows 的原因是因为创建此网站的人有超时 cookie,并且在加载前一个页面之前无法调用这些页面。 这是一个内容脚本,所以所有代码都在下一页。也许如果有办法检查确切的 url?但是我之前玩那个的时候电脑不区分

urlhere.com/uc/ 

urlhere.com/uc/health/index/1

每次导航时(例如,在分配 window.location 后立即),您的脚本停止执行会随页面一起卸载,而当下一页加载时,内容脚本确实会再次加载。如果加载相同的脚本相同的初始状态,当然会执行相同的操作

可能的解决方案(有很多):

  1. 匹配更精确(=更好地注意到实际变化的状态)。

    loc.match('http://url.com/uc/') 只会检查地址 是否包含 该字符串 - 您显示的所有 URL 都会这样做。为什么不直接使用 loc == 'http://url.com/uc/'(并检查中间页面)?

  2. 使用细粒度的内容脚本(=加载不同的脚本)。

    清单定义了哪些页面加载了哪些脚本。我假设你有这样的东西:

    "content_scripts" : [{
      "js" : ["jquery.js", "content1.js"],
      "matches": ["http://*"]
    }]
    

    您可以编写多个脚本并让 Chrome 解析 URL。例如,content1.js 将执行第一个重定向,content2.js 将执行第二个。

    "content_scripts" : [{
      "js" : ["jquery.js", "content1.js"],
      "matches": ["http://url.com/uc/"]
    }, {
      "js" : ["jquery.js", "content2.js"],
      "matches": ["http://url.com/uc/health/index/1"]
    }]
    
  3. 使用一些持久状态(在导航之间持续存在)来指示您处于重定向的哪个阶段(=自己控制更改状态)。

    该页面的 sessionStorage 非常适合此用途,因为它仅在选项卡中持久存在:

    if (match) {
      switch (sessionStorage.redirectStage) {
        case 3:
          // We're at the final page, do actual work
          break;
        case 2:
          sessionStorage.redirectStage = 3;
          window.location = "http://url.com/uc/health/communication/createSelectTemplate";
          break;
        default: // Includes initial state when it's unset
          window.location = "http://url.com/uc/health/index/1";
      }
    }