2014-09-11 61 views
1

我在扩展声明清单2背景页和扩展本身是持久: “背景”:{ “老大难”:真实, “脚本”:“UrlMonitor.js” “background.js”] }背景脚本加载多次

在我background.js,我创建了UrlMonitor的一个实例(UrlMonitor.js declated)

var monitor = new UrlMonitor(); 

在UrlMonitor.js,我有几个全球由事件回调访问的变量。

var nativePort = null; 
var TabInfoKP = new Object(); 
var TabInfoKPN = new Object(); 

我已经注意到,调用脚本加载多次,多次调用

var monitor = new UrlMonitor(); 

var nativePort = null; 
var TabInfoKP = new Object(); 
var TabInfoKPN = new Object(); 

我期待的脚本加载一次,并保持在后台,只响应事件回调。我正在使用全局TabInfoKP来跟踪选项卡状态(通过在事件回调中更新它们)。通过多重初始化,我将以前存储的信息放在变量中。即使在创建/更新新选项卡等情况下也会发生负载。

我做错了什么或者这是预期的功能吗? 如果这是预期的功能,我的替代选择是什么?

P.S,我对JS和chrome扩展完全陌生。

+0

不可能说没有更多的代码。但是,不,后台脚本应该只执行一次,如果它是持久的。 – Xan 2014-09-11 11:19:07

+0

缺少的唯一代码是回调。我有tabs.OnCreated和tabs.OnUpdated的回调,他们所做的就是将tabId和被访问的url添加到全局TabInfoKP变量中。 – Sri 2014-09-11 12:38:18

回答

0

好的......我设法避免了这种情况的发生。 我一直在调试器下运行这个脚本,每当我调试到断点时,我都会按F5(从Visual Studio老习惯),这似乎触发了这个问题。也许运行时正在重新加载脚本并重新开始。

不好意思,但今天一直困扰着我,我所要做的只是将鼠标悬停在chrome调试器的continue图标上,以实现F5不是指定的快捷键! 有谁知道铬调试器中的快捷方式是什么?

+0

它是f8,而在源选项卡上 – James 2014-09-11 13:21:12

+0

现在在扩展列表页面上尝试。 – Xan 2014-09-11 13:34:57