动态编写Javascript代码?

我正在使用相同的代码库创建动态网站,我需要根据某些逻辑显示相应的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代码替换它.

我觉得这样做不对……我错过了什么?

谢谢.

最佳答案 您可以使用ever evil 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);  
}  

为什么这不是一个好主意

点赞