如何在Chrome扩展程序的弹出窗口中重新加载当前选项卡?

9
我正在尝试通过Chrome扩展程序点击按钮以刷新当前页面。需要说明的是,我加载了一个脚本,并且需要刷新页面,因为目前我只有一个免责声明“您需要刷新页面才能使其正常工作”,但我想自动完成这个过程并删除该免责声明。我无法找到解决方法。下面是我正在使用的代码。如果您知道一种方法可以消除此代码并仅使用onclick,则更好,但我已经尝试过 onclick="location.reload();" ,但它无法获取实际选项卡而只是弹出窗口中的页面。 background.html
chrome.browserAction.onClicked.addListener(function (activeTab) {
    var newURL = toggleDevMode(activeTab.url);
    chrome.tabs.update({
        url: refresh
    });
});

refresh.js

document.getElementById("mydivtoclicky").onclick = function() {
    chrome.tabs.getSelected(null, function(tab) {
        tabId = tab.id;

        // send a request to the background page to store a new tabId
        chrome.runtime.sendMessage({type:"new tabid", tabid:tabId});
    });
};

chrome.runtime.sendMessage({type:"refresh"});

popup.html

<head>
    <script type="text/javascript" src="../refresh.js"></script>
</head>
<body>
    <div id="mydivtoclicky">REFRESH PAGE</div>
</body>

Please help thanks.

3个回答

16
假设你想要在扩展程序的后台运行时刷新用户当前Chrome窗口中正在使用的选项卡,你可以在background.html/background.js中使用以下示例。
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
  chrome.tabs.reload(tabs[0].id);
});

了解更多关于chrome.tabs.reload的信息。


13

使用chrome.tabs.update方法和标签页的URL来刷新页面。

refresh.js:

document.getElementById("mydivtoclicky").onclick = function() {
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
        chrome.tabs.update(tabs[0].id, {url: tabs[0].url});
    });
};

我只需要这个吗?不需要其他的东西吗? - wanna know
好的,谢谢,但是它没有起作用。你知道我是从Chrome扩展弹出窗口中点击这个的吗? - wanna know
我怎么说不在那里?使用调试器:右键单击弹出窗口并选择“检查弹出窗口”,打开源选项卡,找到您的JS文件,在onclick处理程序内设置断点,然后单击您的“mydivtoclicky”。 - wOxxOm
调试显示刷新.js的调试屏幕中出现以下内容:Uncaught TypeError: Cannot set property 'onclick' of null - wanna know
1
为了启用 chrome.tabs.update,需要在 manifest.json 中添加 "permissions": [ "tabs" ], - Ethan Yang
显示剩余4条评论

9
我的Chrome扩展程序使用chrome.tabs.reload()正确地重新加载当前标签页,使用默认设置即可。非常简单。弹出窗口本身保持打开状态。
在popup.js中...
function reloadMainTab() {
    chrome.tabs.reload();
}
document.getElementById('reloadBtn').addEventListener('click', reloadMainTab);

您需要在 manifest.json 文件中设置 tabs 权限。


这看起来最简单。与你可能想的相反,这只重新加载了我当前所在的选项卡,而不是浏览器中的所有选项卡,这正是我想要的。 - Volomike
这是最好的答案。 - Adam Lynch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接