您没有指定版本,所以我假设 8.5+ 具有完整的框架 API
它归结为页面事件执行顺序 - 无法手动指定优先顺序。
但是,如果您在小部件 Init 事件中加载 /js/widget.js 并在页面 Load 事件中加载其他内容,则应首先加载 widget.js。我不确定这是否适合您上面描述的内容 - 您可能要求在上面的代码中的其他两个之间加载小部件 JS ,这是不可能的。至少,不是开箱即用。
但是您可以使用自定义解决方案做一些事情。例如,这样的东西应该可以工作,虽然我没有测试过。我正在使用 HTTPContext 将对象从一个事件传递到下一个事件——这将跨小部件、页面、主控等工作。
// adding javascript objects to http context in init function on page/widget
protected void Page_Init(object sender, EventArgs e)
{
List<JSObject> AddOns;
object StoredAddOns = HttpContext.Current.Items["JSAddOns"];
if (StoredAddOns == null)
{
AddOns = new List<JSObject>();
}
else
{
AddOns = (List<JSObject>)StoredAddOns;
}
// javascript being added to the list in the wrong order intentionally
AddOns.Add(new JSObject() { name = "LastJS", path = "/js/last.js", priority = 10 });
AddOns.Add(new JSObject() { name = "WidgetJS", path = "/js/widget.js", priority = 5 });
HttpContext.Current.Items["JSAddOns"] = AddOns;
}
// reading js objects from httpcontext and adding them to the page using framework ui api
// this could just as easily be prerender - as long as the event that reads the objects is after the event that writes them
protected void Page_Load(object sender, EventArgs e)
{
object StoredAddOns = HttpContext.Current.Items["JSAddOns"];
if (StoredAddOns != null)
{
var AddOns = (List<JSObject>)StoredAddOns;
// using LINQ to order the JS objects by custom-defined priority setting
var SortedAddOns = AddOns.OrderBy(j => j.priority);
// looping through items in priority order to add to the page
foreach (var js in SortedAddOns)
{
Ektron.Cms.Framework.UI.JavaScript.Register(this, js.path, true);
}
}
}
// the custom js object
public class JSObject
{
public int priority { get; set; }
public string path { get; set; }
public string name { get; set; }
public JSObject()
{
priority = 0;
path = string.Empty;
name = string.Empty;
}
}
旁注:如果您要使用 SitePath,请不要以 / 开始下一个字符串。否则,路径将出现 //js/widget.js,假设您的 Ektron 应用程序位于站点的根目录中,或者 /path//js/widget.js 如果它位于子文件夹或子应用程序中。