【问题标题】:Is it possible to run javascript after a page has loaded using a omnibox extension?是否可以在使用多功能框扩展加载页面后运行 javascript?
【发布时间】:2017-06-07 02:20:12
【问题描述】:

我正在尝试构建多功能框扩展。本质上我希望这个扩展拉出一个 url,然后等待该 url 加载,然后执行一些简单的 javascript。

不确定将长代码块放在问题中是否值得赞赏,如果不是,请随时对我大喊大叫。

manifest.json:

{
    "manifest_version": 2,
    "name": "AutoATR",
    "version": "0.1",
    "omnibox": { "keyword" : "atr" },
    "icons": {
      "16": "package.png"
    },
    "background": {
      "persistent": true,
      "scripts": ["background.js"]
    }
}

背景.js:

function resetDefaultSuggestion() {
  chrome.omnibox.setDefaultSuggestion({
  description: 'atr: Placeholder: %s'
  });
}
resetDefaultSuggestion();

function navigate(url) {
  chrome.tabs.query({active: true, currentWindow: true}, function(tabs) 
{
  chrome.tabs.update(tabs[0].id, {url: url});
  });
}

function finder(theID) {
  document.getElementById('theElement').value=theID
  document.getElementsByClassName('btn')[1].click()
}

chrome.omnibox.onInputEntered.addListener(function() {
    // Navigate to URL
    navigate("https://theURL.com");
});

// **** Would like to wait for just this tab to load. 
// Then Execute finder(). ****

【问题讨论】:

  • 不是 100% 确定,但您可以在地址栏/多功能框中执行以下操作:javascript:alert('test'); - 如果您输入的是 URL 而不是 URL,它会起作用。
  • 你是在建议这样的事情吗? navigate(javascript:alert('test'););
  • 您有一个标签 ID。您等待适当的事件,就像任何其他选项卡/页面加载一样。您想要观看的确切事件将取决于您何时想要对页面的加载采取行动。要收听的正常事件是tabs.updated,或webNavigation 事件之一(通常是onCompletedonDOMContentLoaded),具体取决于您需要知道的内容。
  • 这也是我想弄清楚的。如何获取该选项卡的 tabID?我一直在尝试理解文档,但示例很少。
  • 问题询问“我可以做 X 吗?/有可能做 X 吗?”很少适用于堆栈溢出 (SO) 格式。答案通常是“是”,但有时是“否”。无论哪种方式,它通常都不是很有效。此外,通常的意思是“我该怎么做 X?”,这通常但并不总是对 SO 来说过于宽泛。在您的情况下,答案是“是”。如果没有您提供的更多信息,您的愿望就不清楚了。 (见之前的评论)。您在代码中放置 cmets 的位置不在导航后的程序流程中,因此我们并不真正知道您想要什么。

标签: javascript google-chrome-extension omnibox


【解决方案1】:

您可以为您的任务使用清单: 将选项卡的后台脚本位置中的位置更改为您的 pathURL 并在 manifest.json 添加下一个代码:

  "content_scripts": [{
            "matches": ["http://pathURL"],
            "js": ["js/script.js"]
        }]

js/script.js 将在您的浏览器选项卡路径与“http://pathURL”模式匹配后加载。

【讨论】:

  • 我也在想同样的事情,但我通常会打开该选项卡的多个实例,并且我不希望它在每个选项卡上运行。我也不确定如何将输入到多功能框中的文本传递给 script.js。
  • 您可以在 chrome.runtime.sendMessage link 的帮助下通过后台页面从多功能框中传递文本
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多