3

我必须在我的 asp.net 应用程序中使用一些内联代码。Fe 我有以下内联代码:

<% FlashRenderer.Render(); %>

这将返回我以下标记:

<div id="flashGame" style="color:red"></div>
  <script type="text/javascript" language="javascript">
     var flash = document.getElementById('flashGame');
     ...
  </script>
</div>

我需要将 FlashRenderer.Render() 的结果分配给 javascript 变量,然后使用 jquery 将该标记附加到某个父 div。我尝试如下:

   <script type="text/javascript">
       var swfString = '<%= FlashRenderer.Render() %>';
       $("swf").append(swfString);
   </script>

它失败了,因为内联包含的结果字符串同时具有单引号和双引号,所以当我使用单引号来换行时, '<%= FlashRenderer.Render() %>'我总是在浏览器控制台中出现语法错误。我尝试用“\'”替换“'”,但在创建字符串之前发生错误。

这是我尝试使用 JavaScriptSerializer().Serialize 后的截图

语法错误

4

3 回答 3

4

您可以使用 JSON 序列化程序,它将为您提供一个 Javascript 安全的字符串,包括引号,并且它还将处理换行符:

--JSON.NET--:
var x = <%= JsonConvert.SerializeObject(FlashRenderer.Render()) %>;

or

--System.Web.Script.Serialization--:
var x = <%= new JavaScriptSerializer().Serialize(FlashRenderer.Render()) %>;

这将呈现如下内容:

var x = "<div id=\"flashGame\" style=\"color:red\"></div>\r\n   <script type=\"text/javascript\" ...etc... </div>";
于 2013-07-30T15:10:55.513 回答
1

与其尝试将它放在一个字符串中,不如让它隐藏在页面上并移动它:

<div style="display:none">
  <%= FlashRenderer.Render() %>
</div>

<script type="text/javascript">
  $("swf").append($("#flashGame"));
</script>
于 2013-07-30T15:07:35.930 回答
1

如果您无法修改 C# 代码,请使用 Hacky 解决方案。将函数输出到 textarea 中,然后使用 jQuery 获取 textarea 的值。

<textarea id="swfref" style="display:none;">
<% FlashRenderer.Render(); %>
</textarea>

<script type="text/javascript">
    var swfString = $("#swfref").val();
    $("swf").append(swfString);
</script>
于 2013-07-30T15:20:20.560 回答