2011-12-27 88 views
3

我使用相同的代码库创建动态网站,我需要根据某些逻辑显示适当的Google广告Javascript代码。动态编写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> 

正如你所期望的,我得到一个警告框“叫警报()串1:2串”,等等mysite.com的功能是从站点2

显然访问时,我做了查看源代码页面,我只看到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

修改页面的内容,以便您在查看源代码时看到更改的内容,但它不起作用。 – jessegavin 2011-12-27 17:43:50

+0

不,我只是想动态设置显示在页面上的JavaScript。所以请求进入/ script_processor /,并返回相应的Javascript,需要从调用它的站点可见。 – ElHaix 2011-12-27 17:57:00

回答

2

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

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

我不知道究竟你想什么来完成的,但你可以把一个eval呼叫这样,无论你想:

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); 
} 

,如果你的目标是能够在页面中包含外部JavaScript和有外部JavaScript为什么它不是一个好主意

+0

更新了上面的更多细节。 – ElHaix 2011-12-27 17:52:51

+0

感谢您对eval的信息...我过去远离这一点。我试图完成的是在制作js引用时,来自www.mysite.com/script_processor/的响应可以显示为Google/etc。从我上面的测试中,我知道脚本是可访问的,并且我可以将变量传递给script_processor,这将允许我添加适当的js响应文本。在站点1上引用script_processor时,我如何验证脚本是否已加载并可见,当我看到的是代码中的引用时? – ElHaix 2011-12-28 15:54:56

+1

@ElHaix - 啊,我明白了。假设在脚本中声明了一个名为'x'的全局变量,并且您想知道是否已加载此脚本。最好的办法是检查x是否存在,你可以这样做:if(typeof x ===“undefined”)alert(“not loaded”);' – 2011-12-28 15:57:16