>백엔드 개발 >C++ >C# 애플리케이션 내에서 JavaScript 코드를 구문 분석하고 실행하는 방법은 무엇입니까?

C# 애플리케이션 내에서 JavaScript 코드를 구문 분석하고 실행하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-29 10:37:10248검색

How to Parse and Execute JavaScript Code within a C# Application?

C#에서 JavaScript를 구문 분석하고 실행하는 방법

이 코드 예제에서는 32비트 및 64비트를 지원하도록 Windows 스크립트 엔진을 래핑합니다. -bit 환경.

특정 사례의 경우 .JS 코드에 따라 '문서', '창' 등과 같은 일부 HTML DOM 요소를 에뮬레이트/구현해야 합니다(MyItem 클래스와 함께 '이름이 지정된 항목' 기능을 사용합니다. 이것이 바로 Internet Explorer가 수행하는 작업입니다).

여기 이를 사용하여 수행할 수 있는 작업의 샘플은 다음과 같습니다.

1) 직접적인 표현 평가:

Console.WriteLine(ScriptEngine.Eval("jscript", "1+2/3"));

표시됩니다. 1.66666666666667

2) 선택적 인수가 있는 함수 호출:

using (ScriptEngine engine = new ScriptEngine("jscript"))
{
  ParsedScript parsed = engine.Parse("function MyFunc(x){return 1+2+x}");
  Console.WriteLine(parsed.CallMethod("MyFunc", 3));
}

6개 표시

3) 명명된 항목 및 선택적 인수가 있는 함수 호출:

using (ScriptEngine engine = new ScriptEngine("jscript"))
{
    ParsedScript parsed = engine.Parse("function MyFunc(x){return 1+2+x+My.Num}");
    MyItem item = new MyItem();
    item.Num = 4;
    engine.SetNamedItem("My", item);
    Console.WriteLine(parsed.CallMethod("MyFunc", 3));
}

[ComVisible(true)] // Script engines are COM components.
public class MyItem
{
    public int Num { get; set; }
}

표시됩니다 10.

편집: 스크립트 언어 이름 대신 CLSID를 사용할 수 있는 가능성을 추가하여 새롭고 빠른 IE9 "chakra" 자바스크립트 엔진을 재사용할 수 있습니다. 이:

using (ScriptEngine engine = new ScriptEngine("{16d51579-a30b-4c8b-a276-0ff4dc41e755}"))
{
    // continue with chakra now
}

전체 소스는 다음과 같습니다.

(제공된 내용 참조) 코드)

사용법:

  1. 원하는 스크립팅 언어에 대한 ScriptEngine 객체를 생성합니다.
  2. Eval 또는 Parse 메서드를 사용하여 평가하거나 스크립트 텍스트를 구문 분석합니다.
  3. 메서드를 호출하거나 속성에 액세스하려면 다음에서 반환된 ParsedScript 객체를 사용하세요. 구문 분석.
  4. 이름이 지정된 항목을 설정하려면 ScriptEngine의 SetNamedItem 메서드를 사용하세요.

참고:

  • ScriptEngine 클래스 Windows 스크립트 엔진을 둘러싼 래퍼입니다.
  • ParsedScript 클래스는 평가할 수 있는 구문 분석된 스크립트를 나타냅니다.
  • 이름이 지정된 항목을 사용하면 개체를 스크립트 엔진에 전달할 수 있습니다.

위 내용은 C# 애플리케이션 내에서 JavaScript 코드를 구문 분석하고 실행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.