将ScriptReference添加到动态脚本

本文关键字:动态 脚本 添加 ScriptReference | 更新日期: 2023-09-27 18:00:35

我想让数据库中的文本在Javascript中可用。我制作了Texts.aspx,它输出Javascript代码,我想包含它。包含必须按照正确的顺序进行,因为Texts.aspx使用其他Javascript文件中的函数。我试着给这个aspx文件添加一个ScriptReference,但这破坏了它。以下代码在ScriptResource.axd.上出现404错误

 <asp:ScriptManager runat="server" EnableScriptGlobalization="true">
     <CompositeScript>
         <Scripts>
             <asp:ScriptReference Path="~/Scripts/textFunctions.js" />
             <asp:ScriptReference Path="~/Scripts/Texts.aspx" />
             <asp:ScriptReference Path="~/Scripts/useTexts.js" />
        </Scripts>
    </CompositeScript>
</asp:ScriptManager>

如何包含动态生成的Javascript文件?

将ScriptReference添加到动态脚本

请使用IHttpHandler而不是标准的aspx页面,因为它才是您真正想要的。如果必须使用aspx文件,请确保只返回javascript内容,并将内容类型设置为javascript的内容类型。

例如:

public class Texts : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/javascript";
        context.Response.Write("var texts = { Some: 'some text here' }");
    }
    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

在master或aspx 中

<asp:ScriptManager runat="server" ID="sm">
    <Scripts>
        <asp:ScriptReference Path="/Scripts/jquery-1.4.1.js" />
        <asp:ScriptReference Path="/texts.ashx" />
    </Scripts>
</asp:ScriptManager>

最后你可以确认它是有效的(你也会在firebug中看到你的ashx文件被正确地识别为javascript)

<script type="text/javascript" language="javascript">
    alert(texts.Some);
</script>

不,这是不可能的。ScriptReference引用一组脚本,然后从磁盘读取这些脚本,因此不可能对HTTP位置进行ScriptReference。