11

Is it possible to pass a variable to a linked .js file? I tried this:

<sf:JsFileLink ID="JQueryLoader" runat="server" ScriptType="Custom" FileName="~/Files/Scripts/rotatorLoader.js?timeout=1000" />

But firebug is telling me that timeout is not defined. Here is the code for that .js file:

$(document).ready(function() {
    $("#rotator > ul").tabs({ fx: { opacity: "toggle"} }).tabs("rotate", timeout, true);
});

I am using <sf:JsFileLink ... /> tag is because the website I am working in utilizes sitefinity and this tag allows me to load external .js files.

UPDATE:

I was able to 'trick' the include by creating an aspx page that emulates a javascript page:

<%@ Page Language="C#" %>

<%
    Response.ContentType = "text/javascript";
    Response.Clear();
    string timeout;
    try
    {
        timeout = Session["timeout"].ToString();
    }
    catch
    {
        timeout = "4000";
    }
%>

$(document).ready(function() {
    $("#rotator > ul").tabs({ fx: { opacity: "toggle"} }).tabs("rotate", <%=timeout %>, true);
});

And on the user control page:

[DefaultProperty("BannerTimeout")]
public partial class Custom_UserControls_TabbedRotator : System.Web.UI.UserControl
{
    [Category("Configuration")]
    [Description("Sets the rotation timeout, in seconds.")]
    [DisplayName("Banner Timeout")]
    public int BannerTimeout { get; set; }

    protected void Page_Load(object sender, EventArgs e)
    {
        Session.Add("timeout", (BannerTimeout*1000));
    }
}

This achieved what I was looking for, and maybe this method can help someone else out.

Anders
  • 12,088
  • 34
  • 98
  • 146

4 Answers4

18

try this:

<script>
var myvariable = "foo";
</script>
<script src="/link/to/js.js"></script>
Byron Whitlock
  • 52,691
  • 28
  • 123
  • 168
  • I know this is old, but this seems to exactly answer the op's question, and very elegantly. Thanks so much!! I may be misunderstanding what the op asked because I'm not good at javascript, but this allowed me to pass variables from my view page so my external js file had access to the variables. Unless there's something I'm missing in the op's question, the marked answer is wrong. I guess this is almost the same as @Developer-Sid – Alan Jul 22 '19 at 19:17
16

No, you can't pass parameters like that and have the script read them in.

Technically you could grab them from the <script> tag, but that would be a real mess.

Could you just output a script block before you include the file?

<script type="text/javascript"> var timeout = 1000; </script>
Greg
  • 316,276
  • 54
  • 369
  • 333
  • Doesn't look like it, at least not in this file. I am going to try putting that in the master page file. – Anders Aug 27 '09 at 21:29
  • This works if I have the script block in the master page, but not in the user control file. – Anders Aug 27 '09 at 21:34
  • Actually, you can pass parameters like that and have the script read them in: http://stackoverflow.com/questions/1203933/is-there-any-analogue-in-javascript-to-the-file-variable-in-php/1204095#1204095 – Crescent Fresh Aug 28 '09 at 14:42
  • @crescentfresh that's grabbing the url from the – Greg Aug 28 '09 at 18:45
4
<script type="text/javascript">
var imagesPath = "emblematiq/img/";
</script>
<script type="text/javascript" src="emblematiq/niceforms.js"></script>

This will work fine on server

Developer-Sid
  • 1,372
  • 11
  • 9
0

No, but you can pass a the value directly to a function in that file or set a variable value that will be used in the external file.

Andrew Magill
  • 2,254
  • 4
  • 21
  • 28