淘宝详情页的 BigRender 优化与存放大块 HTML 内容的最佳方式
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style> #box1-data { visibility: hidden; } </style> </head> <body> <!-- 显示 代码 textarea内转义 < < &lt; < &lt; &amp;lt; & &amp; &amp;amp; --> <div id="box1"> <textarea id="box1-data"> <textarea></textarea> &lt; &amp;lt; &amp;amp; <p>缺点:</p> <ol> <li>服务端,要将 html 中的 &amp; 转义成 &amp;amp;</li> <li>服务端,要打破 ETAGO, 将 &lt;/textarea 转义成 &amp;lt;/textarea</li> </ol> </textarea> </div> <script> document.getElementById('box1').innerHTML = document.getElementById('box1-data').value </script> <div id="box2"> <script type="text/html" id="box2-data"> <p>缺点:</p> <ol> <li>服务端,要将 script 里 html 中的 </script 替换为某种特殊标记。</li> <li>浏览器端,得到 htmlCode 后,要将上面的特殊标记替换回原值。</li> </ol> </script> </div> <script> document.getElementById('box2').innerHTML = document.getElementById('box2-data').innerHTML </script> </body> </html>
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <div id="box1"></div> <div id="box2"></div> <div id="box3"></div> <script src="http://code.jquery.com/jquery-2.0.3.min.js"></script> <script> // 不执行 document.getElementById('box1').innerHTML = '<script>alert(1)</script>' // 执行 jQuery 对 script 做了处理 $('#box2').html('<script>alert(2)</script>') function loadScriptString(code) { var script = document.createElement("script"); script.type = "text/javascript"; try { script.appendChild(document.createTextNode(code)); } catch (ex){ script.text = code; } document.getElementById('box3').appendChild(script) // document.body.appendChild(script); } loadScriptString("function sayHi(){alert('hi');}alert(3);") sayHi() </script> </body> </html>