动态编写Javascript代码?

时间:2011-12-27 17:35:51

标签: javascript asp.net-mvc asp.net-mvc-3 dynamic

我正在使用相同的代码库创建动态网站,我需要根据某些逻辑显示相应的Google广告Javascript代码。

在我的.Net 4,MVC3环境中,我设置了以下场景:

导航至www.mysite.com/script_processor/将返回以下文本:

function doAlert(v1, v2){alert('Called alert()' + v1 + ' : ' + v2);}

本文出自我的模型:

page.stringResponse = "function doAlert(v1, v2){alert('Called alert()' + v1+ ' : ' + v2);}";   

然后,我可以从单独的网站/页面执行此类操作:

<script type="text/javascript" src="http://mysite.com/script_processor/">
</script>
<script type="text/javascript">
    doAlert('string 1', 'string 2');
</script>

正如您所料,我收到一个警告框,其中包含“Called alert()string 1:string 2”,因此可以从站点2访问mysite.com上的功能。

显然,当我在页面上查看源代码时,我只看到doAlert()调用,而不是mysite.com上的函数内容。

现在,而不是在mysite.com上的doAlert(),我希望有一个动态写出javascript的函数,当它被调用时可以在站点2上看到。

我创建了一个模型方法:

public GetResponsePage GetPageResponse(string V1, string V2)
{
    var page = new GetResponsePage();
    page.stringResponse = "<script type=\"text/javascript\">document.write('testing injected Javascript.');alert('value of v1: " + V1 + "value of v2: " + V2 + "');</script>";
    return page;
}

导航到路线时,我会看到弹出窗口,以及“测试注入的Javascript”。在页面上。

当我从网站2引用此内容时,我没有看到弹出窗口,也没有在页面源中看到“测试注入的Javascript”。

正如我所提到的,我稍后会用适当的Google Ads js代码的JS代码替换它。

我认为这不是很正常......我错过了什么?

感谢。

2 个答案:

答案 0 :(得分:2)

您可以使用永远邪恶的eval来动态执行JavaScript。您传入的JavaScript也可以声明函数。

eval("function doAlert(v1, v2){alert('Called alert()' + v1 + ' : ' + v2);}");

我不确定完全你想要完成什么,但你可以在任何地方进行这样的评估:

function createDoAlertFunction(){
    eval("function doAlert(v1, v2){alert('Called alert()' + v1 + ' : ' + v2);}");
}

请注意,这应该避免。坚持用老式的方式宣布你的功能,就像你已经存在的那样。

修改

哦,你希望 MVC 动态地注入JavaScript。 MVC有一个 JavaScriptResult ,但看起来它强烈使用,强烈不鼓励。

尽管如此,这里有link显示其用途

public ActionResult DoSomething() {  
   string s = "$('#some-div').html('Updated!');";  
   return JavaScript(s);  
}  

以及为什么这不是一个好主意

答案 1 :(得分:0)

我知道现在已经很晚了。但是从控制器发送JavaScript非常简单。

 @Html.Raw("<script>" + @ViewBag.DynamicScripts + "</script>")

在控制器中发送JavaScript如下:

 ViewBag.DynamicScripts = "alert('test');";