我正在使用相同的代码库创建动态网站,我需要根据某些逻辑显示相应的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代码替换它。
我认为这不是很正常......我错过了什么?
感谢。
答案 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');";