【问题标题】:Chrome extensions page viewerChrome 扩展页面查看器
【发布时间】:2014-05-15 23:44:20
【问题描述】:

我想制作一个 Chrome 扩展程序,它每秒打开一个 URL 列表。我在制作 Chrome 扩展程序/应用程序方面没有太多经验。我已经有了代码的最大部分,但有些东西不能很好地工作。我尝试了很多我在互联网上找到的东西。我尝试使用 Chrome 应用程序而不是 Chrome 扩展程序,但这会显示一些错误。如果我启动代码,它不会在控制台中显示错误,但没有任何事情发生。希望你能找到解决办法!

代码。

manifest.js

{
    "name": "PageViewer",
    "description": "Page Viewer extensions.",
    "browser_action": {
        "default_icon": {
            "38": "logo-16.png"
        },
        "default_title": "Ready for start!",
        "default_popup": "window.html"
    },
    "icons": {
        "128": "logo-128.png",
        "16": "logo-16.png"
    },
    "permissions": [
        "tabs"
    ],
    "manifest_version": 2,
    "version": "0.1"
}

window.html

<!DOCTYPE html>
<html>
    <head>
        <script src="background.js"></script>
    </head>
    <body>
        <div><input type="button" value="Start" class="start"></div>
    </body>
</html>

background.js

chrome.app.runtime.sendRequest.addListener(function() {
    var param = 0;

    var reload = {
        page: function() {
            chrome.tabs.getCurrent(function (tab) {
                param++;
                chrome.tabs.update(tab.id, {url: "http://testsite.com/id/" + param});
            });
        }
    }

    document.getElementsByClassName("start").onclick = function() {
        setInterval(reload.page(), 11000);
    }

});

【问题讨论】:

  • "每秒打开一个 URL 列表" -- 天哪,为什么?
  • 在主题上,你显然不能在扩展中使用chrome.app。 (感谢@devnull69)
  • 请阅读architecture overview。出于您的目的,您实际上并不需要弹出窗口。

标签: javascript html google-chrome google-chrome-extension


【解决方案1】:

首先,您的 background.js 不会在浏览器打开的整个过程中在后台运行。它由弹出窗口的打开触发。 Useful explaination。如果您希望它在后台运行,请将其从您的 .html 中删除,并将以下内容添加到您的清单中:

"background": {
  "scripts": ["background.js"]
},

现在在 chrome://extensions 页面上,您应该会在您的应用中看到“检查视图:背景页面”。但是,您甚至可能不需要扩展程序的后台脚本。如果您只希望它在单击图标时起作用(浏览器操作),那么您不需要添加它。

第二,如前所述,您的侦听器的 .app.* 表示它仅适用于应用程序,而不适用于扩展程序。

由于某种原因,我在处理您的 onclick 事件时遇到了问题,而且我对它不是很熟悉。在脚本中我通常做的是

function fillPopup(){
  var elem = document.getElementById('start');
  elem.addEventListener('click', funcdostuff);
}
document.addEventListener('DOMContentLoaded', fillPopup)

我不完全确定您要通过单击开始按钮来初始化什么。我的建议是为您尝试做的事情绘制或概述初始化路径,然后确保它对 api 有效。例如,您的初始代码将是

等待浏览器点击图标的动作(在清单中定义)
启动 .html
.html 然后启动脚本。
脚本等待按下开始按钮

如果此建议对您不那么相关,我深表歉意,但由于您说您是 chrome 应用和插件的新手,我个人认为在决定将什么放在哪里时,这是一个很好的起点。

【讨论】:

  • 错误。 这既不是内容脚本,也不是背景脚本。它是扩展页面(即弹出窗口)中的脚本,与后台脚本具有相同的 API 访问权限。
  • 哎呀,对不起。猜猜我对差异也很怀疑!我会删除错误的信息。
  • 我同意代码最好移到后台。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-20
  • 2016-04-08
  • 2011-03-03
  • 2013-05-15
  • 2014-10-19
相关资源
最近更新 更多