我遇到了同样的问题:
Script tag in JavaScript string
但是我无法通过建议的解决方案解决问题。我正在使用 jquery 的数据表插件。我从上面的线程尝试了不同的解决方案,但都没有用。我收到“$ is not defined”错误。如果我将 var html 设置为 like“test”,它工作正常。 String 中的脚本插入一个 ActiveX 控件 (IE) 或插件 (FF) 并显示来自数据库的数据。 在下面的代码中,var html 以某种方式破坏了脚本:
function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) {
var dataURL = "'data:chemical/smiles," + aData[0] + "'";
var html = '<script type="text/javascript">'
+ 'cd_insertObject("chemical/x-daylight-smiles", 182, 172,'
+ '"CDCtrl' + iDisplayIndexFull + '","","True","False","True",'
+ 'dataurl='+ dataURL + ');</scr' + 'ipt>';
$('td:eq(0)', nRow).html(html); // here $ causes an error
return nRow;
}
请注意,我还尝试在开始脚本标记中转义所有 < 和 >。同样的问题。 任何想法如何解决?
编辑:
找到解决方案但无法回答我自己的问题所以这里是:
jQuerys .html() 函数去除了脚本标签。我在评论中发现了 .html() 的文档。
另一个问题是第 3 方函数 cd_insertObject 使用 document.write()。
我的解决方案是复制+粘贴 cd_insertObject 但我没有使用文档写入,而是返回一个字符串,然后我将这个字符串放入
$('td:eq(0)', nRow).html(html);
最佳答案
该错误与您尝试注入(inject) <script> 标签无关。错误“$ is not defined”的意思就是,“$”是未定义的,它不存在,因此你不能通过$()
调用它。
可能的原因是您在包含 jQuery 之前包含此脚本,将 jQuery 脚本标记移动到加载此脚本的标记上方以修复它。
也有可能你用过<a href="http://api.jquery.com/jQuery.noConflict/" rel="noreferrer noopener nofollow">jQuery.noConflict()</a>
,导致 $ 不再引用 jQuery。另一种可能性是在包含 jQuery 和这段代码之间有将 $ 重新定义为未定义的代码:
$ = undefined;
关于JavaScript 字符串中的 JavaScript 脚本标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6198279/