1

我曾经有一个脚本,用于GM_setValue()存储页面中的一大块 html,并将其加载到另一个页面上。所以:

var data = '<div id="test">testing</div>';
GM_setValue("test", data);
alert(GM_getValue("test", "failed"));

会提醒<div id="test">testing</div>

最近我们放弃了 GM API,转而使用 jQuery 和 HTML5,并将 GM_setValue GM_getValue 替换为如下函数:

function $setVal(name, value){
 localStorage.setItem(name, value);
 return false;
}
function $getVal(name, notset){
 return localStorage.getItem(name) || notset;
}

现在的问题是它不能像 GM equivs 那样存储 HTML 字符串。使用新功能后,示例脚本将警告失败。

我试过用正则表达式转义,用 转义escape(),但我没有运气。

有谁知道该怎么做?

编辑:尴尬的是,这实际上似乎工作正常。只是不在我需要的范围内。我有一个文本框,它在提交测试时被简单地评估为 javascript,当我从那里调用该函数时,它可以工作,但是在代码调用时会出错。感谢您的帮助,但实际上它似乎并不像我想象的那样成为问题,抱歉。

4

3 回答 3

1

尝试像这样转义 HTML

var html = '<div id=\"test\">testing</div>';

localStorage.setItem("Foo", html);

放在. \_"

编辑:

我刚刚尝试了以下操作(在 Firefox 中,因为它在我面前打开),它工作正常:

var html = '<div id="test">testing</div>';

localStorage.setItem("Foo", html);

console.log(localStorage.getItem("Foo"));

刚刚在 Chrome 中试了一下,效果很好。

于 2013-10-08T14:08:36.867 回答
1

使用 encodeURI 进行存储,然后使用 decodeURI 进行检索

localStorage.setItem('html',encodeURI('<div id="test">testing</div>'))
localStorage.getItem('html')
"%3Cdiv%20id=%22test%22%3Etesting%3C/div%3E"
decodeURI(localStorage.getItem('html'))
  "<div id="test">testing</div>"
于 2013-10-08T14:16:11.337 回答
0

我将通过将其转换为JSON并返回来实现通用数据的存储。这适用于支持转换为JSON(字符串、数字、大多数对象、布尔值等)的所有内容。

var Mem = (function (localStorage, JSON) {
    return {
        'set': function (key, value) {
            return localStorage.setItem(key, JSON.stringify(value));
        },
        'get': function (key) {
            return JSON.parse(localStorage.getItem(key));
        },
        'del': function () {
            for (var i = 0; i < arguments.length; ++i)
                localStorage.removeItem(arguments[i]);
        }
    };
}(window.localStorage, window.JSON)); // protect references

和用法

Mem.set('foo', 0);
Mem.set('bar', '0');
Mem.set('baz', false);
Mem.get('foo'); // Number 0
Mem.get('bar'); // String "0"
Mem.get('baz'); // Bool false
Mem.del('foo', 'bar', 'baz'); // cleanup

所以对于你的例子

var data = '<div id="test">testing</div>';
Mem.set('test', data);
console.log(Mem.get('test') === data); // true
Mem.del('test'); // cleanup
于 2013-10-08T14:44:33.870 回答