Javascript 为什么在加载页面url之前触发content\ u脚本中的sendMessage api?

Javascript 为什么在加载页面url之前触发content\ u脚本中的sendMessage api?,javascript,google-chrome-extension,sendmessage,content-script,Javascript,Google Chrome Extension,Sendmessage,Content Script,在content\u脚本中,我使用了chrome的sendMessageapi与后台脚本交换数据。但是使用SendMessageAPI脚本会输出意外的结果 当我开始键入url时,在一个新选项卡中,(url尚未加载)sendMessage api将激发到后台脚本(我通过在后台脚本中放置调试器进行了检查) 我在content.js文件中尝试了以下案例以了解问题: 案例1:在这里,当url被键入(未加载)时,就会触发此api。(意外) 案例2:在这里,它等待url加载,然后出现一条警报消息。之后,Se

content\u脚本中,我使用了chrome的sendMessageapi与后台脚本交换数据。但是使用SendMessageAPI脚本会输出意外的结果

当我开始键入url时,在一个新选项卡中,(url尚未加载)sendMessage api将激发到后台脚本(我通过在后台脚本中放置调试器进行了检查)

我在
content.js
文件中尝试了以下案例以了解问题:

案例1:在这里,当url被键入(未加载)时,就会触发此api。(意外)

案例2:在这里,它等待url加载,然后出现一条警报消息。之后,SendMessageAPI启动。(在案例1中预计会出现此结果)

Case2:即使在加载url之前,也会再次输出case1和api。(如案例1中的意外结果)

我已尝试在
manifest.json
文件中排除新选项卡url:

  "content_scripts": [
    {
      "matches": ["*://*.google.co.in/*", "*://*.somehost.com/*"],
      "exclude_matches": ["*://*/_/chrome/newtab*"],
      "js": ["libs/jquery-1.12.3.min.js", "libs/underscore-min.js", "content.bundle.js"],
      "run_at": "document_end"
    }
  ],
我希望加载我的url,然后只注入content.js。然后,只有SendMessageAPI才会启动。我哪里做错了

编辑:


我正在构建一个扩展,用于跟踪其url与manifest.json文件中指定的规则匹配的网页。当加载匹配的url时,内容脚本应向后台页面发出sendMessage调用,以保留此创建页面的记录。但由于在加载url之前调用了sendMessage api,一些垃圾url信息被发送到后台页面。我希望content_脚本的所有部分仅在url完全加载后加载,而不是在键入url时加载

键入时,Chrome正在预取和预呈现隐藏选项卡;您可以在StackOverflow上找到有关此问题的答案。另请参阅有关相应chrome.tabs.onReplaced事件的官方文档。@wOxxOm,参考此链接,我试图将chrome api嵌入内容脚本。键入url时预呈现停止,但无法在background.js上侦听onMessage事件。我是否应该尝试在内容脚本上限制预渲染?或者别的什么?预渲染是一个全局浏览器选项,您不能在本地限制它。你为什么要发这个信息?你需要修改逻辑。如果您需要帮助,请在问题中添加相关的详细信息。@wOxxOm我已在问题中添加了所需的详细信息。我需要修改逻辑吗?不清楚为什么要在内容脚本中跟踪。事件页面(或背景页面)脚本可以通过chrome.tabs.onUpdated listener或chrome.webNavigation.onCommitted(或onCompleted)执行此操作-请参阅文档。在这种情况下,您只需检查
tabId>0
,因为预渲染的选项卡具有
-1
alert();

chrome.runtime.sendMessage({source:'registerTab', data:''}, function(){
    console.log("response_after_background_page")
});
console.log("SOme_message");

chrome.runtime.sendMessage({source:'registerTab', data:''}, function(){
    console.log("response_after_background_page")
});
  "content_scripts": [
    {
      "matches": ["*://*.google.co.in/*", "*://*.somehost.com/*"],
      "exclude_matches": ["*://*/_/chrome/newtab*"],
      "js": ["libs/jquery-1.12.3.min.js", "libs/underscore-min.js", "content.bundle.js"],
      "run_at": "document_end"
    }
  ],