【问题标题】:Mozilla Extension: Multiple States between multiple tabsMozilla 扩展:多个选项卡之间的多个状态
【发布时间】:2013-07-15 06:21:15
【问题描述】:

我正在创建一个 mozilla 扩展程序,通过单击“转换按钮”(标签:转换)将网页内容转换为其他语言 并且它的标签被转换为英文,以便在单击该按钮(标签:英文)时,内容被转换为原始形式

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

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

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

卸载事件的代码是:

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 插件的不同状态。

谢谢

【问题讨论】:

    标签: javascript firefox-addon mozilla


    【解决方案1】:

    您可以使用Session Store API 在选项卡之间设置独立状态。

    -- 编辑:

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

    -- 编辑 2:

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

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

    【讨论】:

    • 然而,这已经通过在每个选项卡上附加属性来完成,但是当按下刷新或单击其他内部链接时如何处理它,或者如果我在按下刷新时在选项卡之间切换,如问题所述
    • 我可能误解了你的问题。我会更新我的答案。
    • 这在我的场景中也不起作用..我想在刷新页面或单击内部链接时捕获事件,并且对于该网页内的每个框架也只捕获一次,这种情况会发生在加载或卸载事件的情况下
    • 我不明白为什么这不起作用。如果当您单击“转换”按钮时进行处理,并且将该选项卡的属性 changedcontent 设置为 true。然后你有一个加载/卸载监听器来检查刷新,将状态改回 false。然后,如果您更改选项卡,则每当您更改选项卡时,都会有 tabSelect 事件来更改按钮。我错过了什么吗?
    • 查看当你按下刷新页面开始加载和事件卸载被调用多次可能是如果该页面上存在多个框架,我将属性(更改内容)更改为 false 所以如果在切换此进程选项卡然后 var currentTab = gBrowser.selectedTab;将其他选项卡作为选定选项卡并将其属性“changedcontent”更改为不需要的 false
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    • 2017-08-22
    • 2015-10-17
    • 1970-01-01
    相关资源
    最近更新 更多