1

可能的错误描述

继这个问题之后,我认为如果我创建选项卡 A、B、C,其中 A 包含列表 D,则与 Spotify 应用程序的历史集成中存在错误。如果我单击

A --> B --> C --> A
这可以通过编程方式完成

spotify:app:appname:A
spotify:应用程序:应用程序名称:B
spotify:应用程序:应用程序名称:C
spotify:app:appname:A

效果很好。但是,如果我点击

A --> A:D --> C --> A --> B
这可以通过编程方式完成

spotify:app:appname:A
spotify:app:appname:A:D
spotify:应用程序:应用程序名称:C
spotify:app:appname:A
spotify:应用程序:应用程序名称:B

如果我正在查看 A:D,这允许我返回 A(解决我原来帖子的问题)

但是,当我单击第二个序列并查看

sp.core.getArguments();
第二个序列显示为

spotify:app:appname:A
spotify:app:appname:A:D
spotify:应用程序:应用程序名称:C
spotify:app:appname:A:D
spotify:应用程序:应用程序名称:B

含义1

如果我使用状态并使用类似的东西创建显示

  sp.core.addEventListener("argumentsChanged", tabUpdate);

功能标签更新(po){
    var args = sp.core.getArguments();     
    开关(参数 [0])
    {
      案例“A”:
        显示(参数);
        休息;
      案例“B”:
        显示B();
        休息;
      案例“C”:
        显示C();
        休息;
    }

当我单击选项卡 A 时,它会显示不正确,因为 :D 已附加到选项卡 A。

含义2

如果我只是使用状态,以便浏览器将 A 和 A:D 视为不同(也可以通过单击选项卡从 A:D 返回 A)

使用列表 D 的 onclick 元素修复显示更改,这意味着它可以向前单击。但是,使用导航按钮后退会显示不正确。即,如果我单击然后使用后退按钮,它将显示

B --> A --> C --> A --> A

代替

B --> A --> C --> A:D --> A

备选方案 2

使用与上述相同的设置,但单独使用对 D 的引用。

spotify:app:appname:A
发现:应用程序:应用程序名称:D
spotify:应用程序:应用程序名称:C
spotify:app:appname:A

显示为

spotify:app:appname:A
spotify:app:appname:D:A
spotify:应用程序:应用程序名称:C
spotify:app:appname:D:A

这意味着当我从 C 单击返回 A 时,它不会显示 A。

问题

有没有办法解决这个问题?

如果需要,我可以组合一个应用程序来复制它。

4

1 回答 1

2

我知道你在说什么,我可以确认这个问题存在。

简而言之,如果您在选项卡 A 上,并且在该选项卡内导航到 window.location,当您转到选项卡 B 并返回选项卡 A 时,您会得到与上次查看时相同的参数在选项卡 A。

我认为这实际上是有道理的,因为它会在每个选项卡上维护状态历史记录,但是在某些情况下您不希望这种情况发生,具体取决于您的应用程序的工作流程。

可以使用 argumentsChanged 事件处理程序来检查这一点,但有一个问题:您无法通过单击选项卡或按下后退/前进按钮来判断 argumentsChanged 是否已被触发。

如果传递给 argumentsChanged 事件处理程序的事件对象可以告知用户是否单击了选项卡或正在使用后退/前进按钮进行导航,那么开发人员可以非常轻松地解决这些工作流程。

于 2012-02-17T12:37:54.007 回答