#javascript #c# #jquery #wpf
#javascript #c# #jquery #wpf
Вопрос:
если у вас есть javascript:
function calculateValues(callback)
{
window.external.getHistoryRange(0,1,"",function(res){
var hist = eval(res);
histCount = hist.historyCount;
hist = hist.historyContent;
if (histCount == 0)
{
return;
}
$("#history_table").show();
var $row = addAlertHistoryRow(hist[0]);
var rowHeight = $row.height();
pageItemsCount = Math.floor(contentHeight / rowHeight);
curPageNum = 0;
$row.remove();
if (callback) callback();
});
}
в функции calculateValues(обратный вызов) параметр обратного вызова равен:
function(){statItempos = 0; gethistoryandshow(pageNum,startItemsPos,callback);}
и код c #, который работает с этим скриптом (ObjectForScripting):
public string getHistoryRange(string strVar0 = "", string strVar1 = "", string strVar2 = "", string strVar3 = "")
{
string res = "";
using (DeskAlertsDbContext db = new DeskAlertsDbContext())
{
var alerts = db.HistoryAlerts.OrderBy(a => a.ReciveTime)
.Include(b => b.alert.WINDOW)
.ToList();
foreach (var alert in alerts)
{
res = ("{"id":" System.Web.HttpUtility.JavaScriptStringEncode(alert.alert.Alert_id)
","date":""
System.Web.HttpUtility.JavaScriptStringEncode(
alert.ReciveTime.ToString(CultureInfo.InvariantCulture)) "","alert":""
System.Web.HttpUtility.JavaScriptStringEncode(alert.alerttext) "","title":""
System.Web.HttpUtility.JavaScriptStringEncode(alert.alert.Title) "","acknow":""
System.Web.HttpUtility.JavaScriptStringEncode(alert.alert.Acknown) "","create":""
System.Web.HttpUtility.JavaScriptStringEncode(alert.alert.Create_date) "","class":""
"1" "","urgent":"" System.Web.HttpUtility.JavaScriptStringEncode(alert.alert.Urgent)
"","unread":"" Convert.ToInt32(alert.isclosed).ToString() "","position":""
System.Web.HttpUtility.JavaScriptStringEncode(alert.alert.Position) "","ticker":""
alert.alert.Ticker "","to_date":""
System.Web.HttpUtility.JavaScriptStringEncode(alert.alert.To_date) ""},");
}
res = res.TrimEnd(','); //trim right ","
res = "({"historyCount":" alerts.Count.ToString() ","historyContent":[" res "]});";
Browserwindow.Wb.InvokeScript("eval", new object[] { strVar3 });
Browserwindow.Wb.InvokeScript("CallbackFunction", new object[] { res });
return res;
}
}
В строке: « Browserwindow.Wb.InvokeScript("eval", new object[] { strVar3 });
»
Я пытаюсь вызвать анонимную функцию из javascript и получаю сообщение об ошибке.
Вопрос в том, как сделать эту логику. Как выполнить функцию JS из параметров другой функции. А затем продолжить JS. Если я попытался присвоить имя функции и вызвать ее, функция работает, но глобальный контекст ( if (callback) callback();
) становится недоступным
Ответ №1:
Ваше имя функции обратного вызова неверно.
Заменить
Browserwindow.Wb.InvokeScript("CallbackFunction", new object[] { res });
С
Browserwindow.Wb.InvokeScript("calculateValues", new object[] { res });
Комментарии:
1. Спасибо за ваш ответ. Все правильно. Функция обратного вызова — это другая функция из js. Ответил сам.
Ответ №2:
Хммм… Просто сделал мою переменную динамической (не строковой), и все заработало
public string getHistoryRange(string strVar0 = "", string strVar1 = "", string strVar2 = "", dynamic strVar3 = null)
{
string res = "";
using (DeskAlertsDbContext db = new DeskAlertsDbContext())
{
var alerts = db.HistoryAlerts.OrderBy(a => a.ReciveTime)
.Include(b => b.alert.WINDOW)
.ToList();
foreach (var alert in alerts)
{
res = ("{"id":" System.Web.HttpUtility.JavaScriptStringEncode(alert.alert.Alert_id)
","date":""
System.Web.HttpUtility.JavaScriptStringEncode(
alert.ReciveTime.ToString(CultureInfo.InvariantCulture)) "","alert":""
System.Web.HttpUtility.JavaScriptStringEncode(alert.alerttext) "","title":""
System.Web.HttpUtility.JavaScriptStringEncode(alert.alert.Title) "","acknow":""
System.Web.HttpUtility.JavaScriptStringEncode(alert.alert.Acknown) "","create":""
System.Web.HttpUtility.JavaScriptStringEncode(alert.alert.Create_date) "","class":""
"1" "","urgent":"" System.Web.HttpUtility.JavaScriptStringEncode(alert.alert.Urgent)
"","unread":"" Convert.ToInt32(alert.isclosed).ToString() "","position":""
System.Web.HttpUtility.JavaScriptStringEncode(alert.alert.Position) "","ticker":""
alert.alert.Ticker "","to_date":""
System.Web.HttpUtility.JavaScriptStringEncode(alert.alert.To_date) ""},");
}
res = res.TrimEnd(','); //trim right ","
res = "({"historyCount":" alerts.Count.ToString() ","historyContent":[" res "]});";
dynamic variable = Browserwindow.Wb.InvokeScript("eval", new object[] { strVar3 });
variable(res);
return res;
}
}