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>ます。

最近、jQuery と HTML5 を優先して GM API から離れ、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 として評価されるテキスト ボックスを持っています。そこから関数を呼び出すと機能しますが、コードによって呼び出されるとエラーが発生します。ご協力ありがとうございます。しかし、実際には私が思っていたのと同じ問題ではないようです。申し訳ありません。

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 に答える