Запуск JavaScript из .net программы
От: Kaif  
Дата: 05.03.05 10:04
Оценка:
Подскажите, каким образом можно запустить кусок JavaScript кода из программы и получить результат? Имеется в виду например c# программа, а не ASP.Net приложение.
Re: Запуск JavaScript из .net программы
От: DuШes  
Дата: 05.03.05 10:44
Оценка:
Здравствуйте, Kaif, Вы писали:

K>Подскажите, каким образом можно запустить кусок JavaScript кода из программы и получить результат? Имеется в виду например c# программа, а не ASP.Net приложение.


Если отталкиваться от того, что у тебя уже есть ссылка на объекта com-класса SHELL.EXPLORER (p_oleWebBrowser — назовем например так), тогда следующая последовательность:

сначалу получаешь ссылку на Document
this.p_oleWebBrowser.Document
далее:
this.p_oHtmlDocument.parentWindow.execScript(твой скрипт);

например:

this.p_oHtmlDocument.parentWindow.execScript("var " + loNodeObject.p_cID + " = new TreeListControlNode(false,'','','" + loNodeObject.p_cID + "');");

для того чтобы вернуть значение, с этим сложности, но пройдет следующий вариант: в jscript-сценарии у тебя должна быть public-переменная (oReference), в клиенте c# нужно создать свой класс с свойствами, куда ты будешь помещать значения или какой-либо результат выполнения твоего jscript сценария

class MyClass
{
...
public MyParent parent;
...
}

далее в c#-клиенте ты создаешь объект такого класса и данный объект (oClientObject) должен передать в jscript-сценарий посредством вызова другого jscript-сценария:
например так, в jscript сцераии опиши функцию:
var objectvfpclass = '';    
function setobject(oClientObject){
  oReference = oClientObject;
}

далее выполняешь скрипт на jscript:
например:
   function getselectednodeid(id_node){
        for(var i=0; i<tree.allNodes.length; i++) {
            if (typeof(tree.allNodes[i]) == 'object') {
                if  (tree.allNodes[i].refKey == id_node){
                    oReference.parent.p_nid = tree.allNodes[i].ID;
                //    oReference.parent.p_onodes[id_node]
                }
            }
        }
        return oReference.parent.p_nrefkey;
    }




удачи...лично я такой вариант делал на vfp, думаю на c# еще проще все это безобразие реализовать...
Re: Запуск JavaScript из .net программы
От: rockandroll Казахстан  
Дата: 05.03.05 11:09
Оценка:
Здравствуйте, Kaif, Вы писали:

K>Подскажите, каким образом можно запустить кусок JavaScript кода из программы и получить результат? Имеется в виду например c# программа, а не ASP.Net приложение.


Например с помощью MS ScriptControl через COM Interop.
А не лучше ли использовать JScript.NET?
... << RSDN@Home 1.1.4 >>
Re: Запуск JavaScript из .net программы
От: Wiz-ars Россия  
Дата: 05.03.05 11:24
Оценка: 4 (1)
Здравствуйте, Kaif, Вы писали:

K>Подскажите, каким образом можно запустить кусок JavaScript кода из программы и получить результат? Имеется в виду например c# программа, а не ASP.Net приложение.



...
JScriptCodeProvider provider = new JScriptCodeProvider();
ICodeCompiler compiler = provider.CreateCompiler();
CompilerParameters cp = new CompilerParameters(new string[] {"System.dll"});
cp.GenerateInMemory = true;

cr = compiler.CompileAssemblyFromSource(cp, sourceText /* на javascript*/ );
Assembly asm = cr.CompiledAssembly;
...


а после этого уже

...
Type t = this.asm.GetType("T");
object o = Activator.CreateInstance(t);
MethodInfo mi = t.GetMethod("Method");
object result = mi.Invoke(o, new object[] {........}));
return result;
...
Запуск JavaScript из .net программы
От: Аноним  
Дата: 05.03.05 10:19
Оценка:
Думаю нужно запустить как внешний процесс и прочитать выходные данные этого процесса и обрабатывать полученные данные по усмотрению


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Запуск JavaScript из .net программы
От: Аноним  
Дата: 05.03.05 10:44
Оценка:
> каким образом можно запустить кусок JavaScript кода из программы и получить результат?

для этого есть Microsoft.JScript.Vsa.VsaEngine();

см. в MSDN: "Visual Studio for Applications Provides Customized Scripting Facilities for Your .NET Project" (ms-help://MS.MSDNQTR.2004JAN.1033/dnmag02/html/VisualStudioforApplications.htm)


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Запуск JavaScript из .net программы
От: Аноним  
Дата: 05.03.05 12:41
Оценка:
В статье "Visual Studio for Applications Provides Customized Scripting Facilities for Your .NET Project" дохлая ссылка на пример.

> каким образом можно запустить кусок JavaScript кода из программы и получить результат

using System;
using Microsoft.Vsa;
using Microsoft.JScript.Vsa;
using System.Windows.Forms;

namespace WindowsApplication1
{
public class VsaForm : System.Windows.Forms.Form
{
private VsaEngine _Engine = null;

public VsaForm()
{
this.Menu = new MainMenu();
this.Menu.MenuItems.Add("Run", new EventHandler(miRun));
}

private void miRun(object sender, EventArgs e)
{
if (this._Engine == null)
{
this.CreateEngine();
if (this.CompileEngine() == false)
return;
}
this.RunEngine();
}

protected void CreateEngine()
{
HtmlSite hs = new HtmlSite();
this._Engine = new VsaEngine(true);
this._Engine.RootMoniker = "vsatest://root/";
this._Engine.Site = hs;
hs.SetEngine(_Engine);
}

protected bool CompileEngine()
{
bool ret = false;
try
{
IVsaCodeItem cdi = (IVsaCodeItem)this._Engine.Items["src"];
// JavaScript передает данные в C#, см. HtmlSite.Test(...)
cdi.SourceText = "ext.Test('hello');";
ret = this._Engine.Compile();
}
catch (Exception exc)
{
MessageBox.Show(exc.ToString());
}
return ret;
}

protected void RunEngine()
{
try
{
this.StopEngine();
this._Engine.Run();
}
catch (Exception exc)
{
MessageBox.Show(exc.ToString());
}
}

private void StopEngine()
{
if (this._Engine.IsRunning)
this._Engine.Reset();
}

protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
this.StopEngine();
}
}

public class HtmlSite : BaseVsaSite
{
public void SetEngine(VsaEngine engine)
{
this._Engine = engine;
this._Engine.InitNew();
this._Engine.RootNamespace = "vsaroot";
this._Engine.SetOption("fast", true);
this._Engine.SetOption("AlwaysGenerateIL", true);
this._Engine.Items.CreateItem("mscorlib.dll", VsaItemType.Reference, VsaItemFlag.None);
this._Engine.Items.CreateItem("src", VsaItemType.Code, VsaItemFlag.Module);
this._Engine.Items.CreateItem("ext", VsaItemType.AppGlobal, VsaItemFlag.None);
}

private VsaEngine _Engine = null;

public override object GetGlobalInstance(string name)
{
object ret = null;
switch (name.ToLower())
{
case "ext":
ret = this;
break;
default:
throw new VsaException(VsaError.GlobalInstanceInvalid);
}
return ret;
}

public override bool OnCompilerError(IVsaError err)
{
MessageBox.Show(err.ToString(), "CompilerError", MessageBoxButtons.OK, MessageBoxIcon.Stop);
return true;
}

/// <summary>
/// Вызывается из JavaScript
/// </summary>
/// <param name="str"></param>
public void Test(string str)
{
MessageBox.Show(str);
}
}
}




данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.