Firefox webextension - 确认功能导致扩展弹出窗口立即关闭

时间:2018-02-07 14:22:27

标签: firefox google-chrome-extension firefox-webextensions

我想将现有的功能齐全的 Chrome 扩展程序移植到 Firefox ,除了confirm()函数行为外,一切似乎都有效。

当用户点击popup.html页面中的特定按钮时,系统会要求他确认操作。

Chrome 成功提示对话框,然后我会立即返回布尔值"确定"或者"取消"单击按钮,执行与返回的布尔值相关的代码。

另一方面,

Firefox 行为让人觉得错误。确认对话框也会提示,但扩展弹出窗口会立即被解除,从而阻止click事件处理程序中的其他代码执行。

manifest.json …, "default_popup": "popup.html", …

popup.html

  …
  <script src="js/popup.js"></script>
</body>

popup.js

removeButton.addEventListener('click', function () {
  // Firefox: calling confirm() closes the popup.html page ...
  // ... terminating event handler code
  if (confirm("Please confirm you wish to remove this item.")) {
    // …
  }
});

有什么可以解决的问题,还是应该停止使用confirm()并找到解决方法?

编辑 - 解决方案解决方案

作为一种解决方法,我在单击按钮时设置3秒倒计时并每秒更改其标题。在时间到来之前,如果用户再次单击,则最终操作将被取消,否则将执行最终操作。

&#13;
&#13;
let log = document.querySelector('p')
    ,resetInterval = null
    ;
document.getElementById('resetbtn').addEventListener('click', function(e) {
  if (!resetInterval) {
      // Create a countdown and delete data when time is up.
      e.target.content = e.target.innerHTML;
      resetInterval = setInterval( function() {
          var counter = +(e.target.innerHTML.trim().match(/\d+/)||[4])[0];
          if (counter == 1) {
              // Sending command to bacground page
              // chrome.runtime.sendMessage({command:'remove'}, function (){
              e.target.innerHTML = e.target.content;
              resetInterval && clearInterval(resetInterval);
              resetInterval = null;
              log.innerHTML = 'Perform action…';
              // });
          } else e.target.innerHTML = 'Reset in '+(counter-1)+'s';
      }, 1000);
      log.innerHTML = '';
  } else {
      resetInterval && clearInterval(resetInterval);
      e.target.innerHTML = e.target.content;
      resetInterval = null;
      log.innerHTML = 'Action aborted';
  }
});
&#13;
<button type="button" id="resetbtn">Reset</button>
<p></p>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

弹出窗口旨在将焦点移到另一个窗口时关闭。您无法使用弹出式窗口中的对话框(新窗口)移动焦点,从而关闭弹出窗口。