我正在构建一个 Chrome 扩展程序。我想知道即使页面发生变化,是否有一种方法可以记住选项卡的 js 变量。例如。如果我在 example1.com 上并在同一个选项卡上转到 example2.com,我应该保留在 example1.com 上设置的变量。我不想使用 Chrome 存储空间。
我不能使用 localStorage 或 sessionStorage,因为 chrome 对不同的域有不同的存储。这可以通过哪些方式实现?
最佳答案
除了使用 localStorage(通过后台页面)之外,您还可以通过从内容脚本向后台页面发送消息,将这些变量直接保存在后台页面中。如果这些变量在扩展页面中(其他内容或注入(inject)的脚本),您可以通过 chrome.extension.getBackgroundPage().window.variableYouWant 方法轻松保存它们,并在内容脚本本身中访问这些变量通过消息传递。
如果这些变量在内容脚本中,则使用消息将这些变量发送到后台页面,如下所示:
chrome.runtime.sendMessage(object);
object 可以是您想要发送的任何对象。
在后台页面上有一个这样的监听器:
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
myVariabeInBackground = message.yourObjectProperties;
});
当您需要这些变量时,您可以在扩展页面(内容脚本除外)中使用 chrome.extension.getBackgroundPage().window.myVariabeInBackground 或者您可以从后台页面向内容脚本发送消息通过在后台页面本身调用 chrome.tabs.sendMessage(tabId, messageObject) 并通过像这样的监听器在内容脚本中接收:
chrome.runtime.onMessage.addListener(
function(request, sender) {}); //request is your sent object.
对于 localStorage,您也可以执行相同的操作,将存储的变量放入您的内容脚本中。
不,您不能直接从内容脚本访问后台页面。
PS:如果重新加载扩展,后台页面中的变量将重置。如果你想在重新加载扩展后使用这些变量,请使用本地存储。扩展不会在浏览器操作时重新加载。
有关详细信息,请阅读 https://developer.chrome.com/extensions/messaging
关于javascript - Chrome 扩展 : Storing variables for a tab even if page changes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24342702/
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我想这样组织C源代码:+/||___+ext||||___+native_extension||||___+lib||||||___(Sourcefilesarekeptinhere-maycontainsub-folders)||||___native_extension.c||___native_extension.h||___extconf.rb||___+lib||||___(Rubysourcecode)||___Rakefile我无法使此设置与mkmf一起正常工作。native_extension/lib中的文件(包含在native_extension.c中)将被完全忽略。
我有一个要在我的Rails3项目中使用的数组扩展方法。它应该住在哪里?我有一个应用程序/类,我最初把它放在(array_extensions.rb)中,在我的config/application.rb中我加载路径:config.autoload_paths+=%W(#{Rails.root}/应用程序/类)。但是,当我转到railsconsole时,未加载扩展。是否有一个预定义的位置可以放置我的Rails3扩展方法?或者,一种预先定义的方式来添加它们?我知道Rails有自己的数组扩展方法。我应该将我的添加到active_support/core_ext/array/conversion
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
我将Cucumber与Ruby结合使用。通过Selenium-Webdriver在Chrome中运行测试时,我想将下载位置更改为测试文件夹而不是用户下载文件夹。我当前的chrome驱动程序是这样设置的:Capybara.default_driver=:seleniumCapybara.register_driver:seleniumdo|app|Capybara::Selenium::Driver.new(app,:browser=>:chrome,desired_capabilities:{'chromeOptions'=>{'args'=>%w{window-size=1920,1
我想编写一个ruby脚本来递归复制目录结构,但排除某些文件类型。因此,给定以下目录结构:folder1folder2file1.txtfile2.txtfile3.csfile4.htmlfolder2folder3file4.dll我想复制这个结构,但不包含.txt和.cs文件。因此,生成的目录结构应如下所示:folder1folder2file4.htmlfolder2folder3file4.dll 最佳答案 您可以使用查找模块。这是一个代码片段:require"find"ignored_extensions=[".cs"
这个问题有两个部分。在RubyProgrammingLanguage一书中,有一个使用模块扩展字符串对象和类的示例(第8.1.1节)。第一个问题。为什么如果您使用新方法扩展类,然后创建该类的对象/实例,则无法访问该方法?irb(main):001:0>moduleGreeter;defciao;"Ciao!";end;end=>nilirb(main):002:0>String.extend(Greeter)=>Stringirb(main):003:0>String.ciao=>"Ciao!"irb(main):004:0>x="foobar"=>"foobar"irb(main):
我想覆盖store_accessor的getter。可以查到here.代码在这里:#Fileactiverecord/lib/active_record/store.rb,line74defstore_accessor(store_attribute,*keys)keys=keys.flatten_store_accessors_module.module_evaldokeys.eachdo|key|define_method("#{key}=")do|value|write_store_attribute(store_attribute,key,value)enddefine_met
假设我们有A、B、C类。Adefself.inherited(sub)#metaprogramminggoeshere#takeclassthathasjustinheritedclassA#andforfooclassesinjectprepare_foo()as#firstlineofmethodthenrunrestofthecodeenddefprepare_foo#=>prepare_foo()neededhere#somecodeendendBprepare_foo()neededhere#somecodeendend如您所见,我正在尝试将foo_prepare()调用注入
我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan