Javascript Mozilla扩展:多个选项卡之间的多个状态

Javascript Mozilla扩展:多个选项卡之间的多个状态,javascript,firefox-addon,mozilla,Javascript,Firefox Addon,Mozilla,我正在创建一个mozilla扩展,它可以在点击“转换按钮”(标签:convert)时以其他语言转换网页内容 它的标签被转换成英语,这样点击按钮(标签:英语)内容就会转换成原始形式 我尝试在每个选项卡上设置属性“changedcontent”,以便在事件焦点上,焦点选项卡读取其“changedcontent”属性,并在按钮上设置标签(“转换”或“英语”) 问题出现在我需要在多个选项卡之间切换的地方,不同选项卡中的插件应根据是否显示更改的内容保持不同的状态(应显示按钮标签:英语) 或其原始形式(

我正在创建一个mozilla扩展,它可以在点击“转换按钮”(标签:convert)时以其他语言转换网页内容 它的标签被转换成英语,这样点击按钮(标签:英语)内容就会转换成原始形式

我尝试在每个选项卡上设置属性“changedcontent”,以便在事件焦点上,焦点选项卡读取其“changedcontent”属性,并在按钮上设置标签(“转换”或“英语”)

问题出现在我需要在多个选项卡之间切换的地方,不同选项卡中的插件应根据是否显示更改的内容保持不同的状态(应显示按钮标签:英语) 或其原始形式(应显示按钮标签:“转换”)

所以当我点击刷新按钮或点击网页中的其他链接时。页面上带有已转换内容的“英语”按钮标签应更改为“转换” 为此,我处理了页面卸载事件以跟踪页面刷新或链接单击,但由于网页可能包含多个帧/iFrame,因此该事件被多次调用。 如果同时切换选项卡,其他选项卡的标签将从“英语”转换为“转换”

卸载事件的代码为:

window.addEventListener('unload', unloadingDocument, true);
function unloadingDocument()
{

    var currentTab = gBrowser.selectedTab;
    currentTab.setAttribute("changedcontent" , "false");//set the transliterated attribute back to false
    var convertButton = document.getElementById("convert_button");
    convertButton.setAttribute("label","Convert");
}
请建议如何解决此问题,并在多个选项卡之间维护mozilla插件的不同状态

谢谢

您可以使用在选项卡之间具有独立状态

--编辑:

因此,如果您已经有办法知道某个特定选项卡是否“已翻译”,如果您希望在选择另一个选项卡时将按钮更改为正确状态,则可能需要检查tabSelect事件: 在这种情况下,请检查选项卡属性,以检查是否必须更改按钮的标签/行为

--编辑2:

如果单击“转换”按钮进行处理,并将该选项卡的属性
changedcontent
设置为
true
。然后有一个
加载/卸载侦听器
来检查刷新,将状态更改回
false
。然后,如果您更改选项卡,则无论何时更改选项卡,都会有
tabSelect
事件来更改按钮

如果在将
changedcontent
更改为
true
时添加此侦听器。然后,当首次调用事件
beforeuload
时,检查
changedcontent
是否为
true
,将其更改为
false
,并删除侦听器。

您可以使用在选项卡之间具有独立状态

--编辑:

因此,如果您已经有办法知道某个特定选项卡是否“已翻译”,如果您希望在选择另一个选项卡时将按钮更改为正确状态,则可能需要检查tabSelect事件: 在这种情况下,请检查选项卡属性,以检查是否必须更改按钮的标签/行为

--编辑2:

如果单击“转换”按钮进行处理,并将该选项卡的属性
changedcontent
设置为
true
。然后有一个
加载/卸载侦听器
来检查刷新,将状态更改回
false
。然后,如果您更改选项卡,则无论何时更改选项卡,都会有
tabSelect
事件来更改按钮


如果在将
changedcontent
更改为
true
时添加此侦听器。然后,当首次调用事件
beforeunload
时,检查
changedcontent
是否为
true
,将其更改为
false
,并删除侦听器。

但是,这已经通过在每个选项卡上附加属性来完成,但当按下“刷新”按钮或单击其他内部链接时,或者当按下问题中提到的“刷新”按钮时,我在选项卡之间切换时,该如何处理?我可能误解了您的问题。我将更新我的答案。这在我的场景中也不起作用。。我想在刷新页面或单击内部链接时捕获事件,并且只捕获一次,而不是在网页内的每个帧中,在加载或卸载事件时发生。我不明白为什么这样做不起作用。如果单击“转换”按钮进行处理,并将该选项卡的属性changedcontent设置为true。然后,您有一个加载/卸载侦听器来检查刷新,将状态更改回false。然后,如果您更改选项卡,则每当您更改选项卡时,都会有tabSelect事件来更改按钮。我是否遗漏了什么?请参阅,当按“刷新”时,页面开始加载并调用多次事件卸载可能是因为该页面上存在多个帧,我将属性(changedcontent)更改为false,因此如果在此过程中切换了选项卡,则var currentTab=gBrowser.selectedTab;将给其他选项卡指定为所选选项卡,并将其属性“changedcontent”更改为false,这是不需要的,但已通过在每个选项卡上附加属性完成此操作,但当按下“刷新”按钮或单击其他内部链接时,或者当按下问题中提到的“刷新”按钮时,我在选项卡之间切换时,该如何处理?我可能误解了您的问题。我将更新我的答案。这在我的场景中也不起作用。。我想在刷新页面或单击内部链接时捕获事件,并且只捕获一次,而不是在网页内的每个帧中,在加载或卸载事件时发生。我不明白为什么这样做不起作用。如果单击“转换”按钮进行处理,并将该选项卡的属性changedcontent设置为true。然后,您有一个加载/卸载侦听器来检查刷新,将状态更改回false。然后,如果您更改选项卡,则每当您更改选项卡时,都会有tabSelect事件来更改按钮。我遗漏了什么吗?请看当你按刷新页面时