我曾经有一个脚本使用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等一样存储HTML字符串。使用新功能后,示例脚本将发出警告失败。
我尝试使用正则表达式进行转义,并使用escape()
进行转义,但我没有运气。
任何人都知道该怎么做?
编辑:尴尬的是,这实际上似乎工作正常。只是不在我需要它的范围内。我有一个文本框,在提交测试时简单地用作javascript,当我从那里调用函数时,它可以工作,但是当代码调用时会发生错误。 谢谢你的帮助,但它实际上看起来并不像我想象的那样,对不起。答案 0 :(得分: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中尝试过,它运行正常。
答案 1 :(得分: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>"
答案 2 :(得分: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