【问题标题】:Overriding Storage method from content script从内容脚本覆盖存储方法
【发布时间】:2016-01-13 03:51:55
【问题描述】:

有没有办法从内容脚本中覆盖localStoragesessionStorage 对象的方法?我试图通过从我的 Chrome 扩展程序(在页面加载之前运行的内容脚本)执行此代码来禁止内联脚本清除存储空间。代码是:

// ==UserScript==
// @name         StorageSaver
// @match        http://barbars.org/*
// @grant        none
// @run_at       startup
// ==/UserScript==
/* jshint -W097 */
'use strict';

// Your code here...
location.href = "javascript: localStorage.clear = function(){alert('local works!');}";
location.href = "javascript: sessionStorage.clear = function(){alert('session works!');}";

【问题讨论】:

  • 你可以在不调用任何方法的情况下清除localStorage,使用delete+for-in...
  • 您的代码在此页面的控制台中运行,因此可以覆盖 clear() 方法,听起来好像还没有完成。
  • 我确信每次从位于<head> 部分的内联脚本刷新页面时,都会清除存储空间。这个脚本使用.clear() 方法来清除两个存储。
  • 您需要 localStorage 才能运行吗?你也许可以 freeze() 它
  • 我需要的是防止我的键值对在页面刷新后被清除。我的脚本正在使用它们来知道在下一页刷新时要做什么,而内联脚本正在擦除它们。

标签: javascript local-storage overriding content-script session-storage


【解决方案1】:

啊,我相信你是在尝试执行

window.localStorage.clear = function() {};

in 您的内容脚本。您的内容脚本与页面的 window 不同,因此这不起作用。解决方法很简单:

location.href = "javascript: localStorage.clear = function(){}";

或者注入一个<script>标签。

这将在页面而不是内容脚本的范围内执行。

【讨论】:

  • 但是如果内联脚本使用window 执行这些方法,它会起作用吗?像这样:window.localStorage.clear(); window.sessionStorage.clear();
  • window. 是多余的,因为您已经在执行 window 中的代码(全局范围)。
  • 刚刚尝试替换内容脚本中的两行,如你所说。没有结果。每次刷新后都会继续清除存储空间。
  • 什么时候执行内容脚本?你是在document_start 运行它吗?
  • 更多信息。我已经为覆盖方法添加了警报。它可以工作,但刷新后存储仍然是空的。也许它会执行两种方法(基本方法和覆盖方法)?我在document_start btw 运行它。
猜你喜欢
  • 2011-08-29
  • 2018-06-27
  • 2015-09-02
  • 2015-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-24
  • 1970-01-01
相关资源
最近更新 更多