丢失上下文参考

时间:2013-11-10 17:34:42

标签: javascript google-chrome google-chrome-extension

在选项页面中创建新对象时遇到“小”问题。

在选项页面中,我创建了一些对象并将其保存为常规设置。这些对象具有与不同API通信的方法。但是一旦我得到其中一个对象,我就失去了我在页面上的上下文。

例如:

选项页面我创建了一个具有方法'request'的对象,并使用此方法向某个api发送ajax请求。当我在另一个页面上调用它时,ajax请求将记录在选项页面中。当我关闭选项页面时,我会丢失所有日志的上下文。

有没有办法强制上下文引用到当前页面?或者我在错误的页面上创建对象/保存它们并在需要它们的页面上检索它们时犯了错误? (IE我应该只保存在页面本身上创建对象所需的数据吗?(对于相同的东西(?),这似乎有很多开销)。

提前致谢。

修改

我有一个创建Object的选项页面,可以将其命名为MyApi。我创建了一个新的MyApi并将其存储在chrome.storage.local中。当用户选择了一些文本并单击上下文菜单时,我打开一个新页面(selectedText.html),显示所选文本并进行一些API调用,这些调用主要是ajax请求。当我从selectedText.html中的存储中获取对象并使用MyApi发出任何请求时,我看到ajax请求的网络选项卡中没有日志,也没有任何控制台日志。但随着我的选项页打开,我看到了那里的一切。

EDIT2

save : function()
{
    var obj = {'api':this.data};
    chrome.storage.local.set(obj,function() { if(chrome.runtime.lastError) console.warn(chrome.runtime.lastError); });
}

这是在后台脚本中。

1 个答案:

答案 0 :(得分:0)

你可以通过这种方式实现你想要的目标:

  1. 在后台页面中定义您的对象/功能/任何内容。
  2. 使用 chrome.runtime.getBackgroundPage() 来暂停后台页面window对象。
  3. 执行所需的方法,将参数作为本地上下文的对象传递。 (当然你必须修改函数来接受并使用这样的参数。)
  4. 示例:

    在background.js中:

    function myFunc(winObj, msg) {
        winObj.console.log(msg);
    }
    

    在otherPage.js中:

    chrome.runtime.getBackgroundPage(function(bgPage) {
        bgPage.myFunc(window, "This will be logged in 'otherPage.html' !");
    });
    

    这不是最干净的解决方案,但可能会有效......