0

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

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

例如:

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

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

提前致谢。

编辑

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

编辑2

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

这是在后台脚本中。

4

1 回答 1

0

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

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

例子:

在 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' !");
});

这不是最干净的解决方案,但它可能会工作......

于 2013-11-10T21:13:02.363 回答