2010-04-26 3 views
6

Qt에서 QtWebKit 브라우저에서 실행되는 JavaScript에 C++ 객체/함수를 노출 할 수있는 방법이 있습니까? Adobe AIR의 WebKit 브라우저에서 실행되는 JS 코드에 ActionScript 객체를 노출 할 수 있습니다. Qt에서 비슷한 기능을 찾고 있습니다.Qt에서 자바 스크립트에 C++ 객체 노출

답변

2

예. this.에서 시작하십시오. 좋은 시작이어야합니다.

+0

정보 주셔서 감사합니다! – BlueSilver

4

편집 : 링크가 작동하지만, 단지의 경우 링크가

하나의 질문은 내가 #qt 및 QT-관심이 여러 번 생각해 본 적이 ... 리처드 무어 다시 [Link] 나누기 how to QtWebKit에 기본적으로 사용 가능한 API에 사용자 지정 (응용 프로그램 관련) API를 추가하십시오. 이것은 아래에 을 표시하므로 실제로는 꽤 쉽습니다 (일단 알고 있다면). 이 게시물은 객체에서 메소드를 호출하고 C++에서 값 을 반환하는 것을 포함하여 자바 스크립트에서 객체를 사용 가능하게 만드는 방법에 대한 간단한 예제를 보여줍니다.

가장 먼저 QWebFrame의 addToJavaScriptWindowObject() 메소드, 당신은 정말이 통합을 수행하기 위해 알아야 할 두 가지가 있으며,이 자바 스크립트에서 지정된 QObject를 볼 수있게됩니다 수 있습니다. 두 번째로 알아야 할 점은 에 게시 된 객체가 자바 스크립트 창 객체가 지워질 때마다 사라지게된다는 것입니다 ( ). 사용자가 새 페이지로 이동할 때마다 이로 인해 문제가 발생하지 않도록 QWebFrame은 객체가 으로 지워질 때마다 사용자 정의 API를 다시 추가 할 수 있음을 알려주는 신호를 제공합니다. 실제로는 훨씬 더 간단합니다. !

이것의 핵심은 정말 예에서는 두 가지 방법으로 구현되어

, 그들은 다음과 같이 있어 :

void MyApi::setWebView(QWebView *view) 
{ 
    QWebPage *page = view->page(); 
    frame = page->mainFrame(); 

    attachObject(); 
    connect(frame, SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(attachObject())); 
} 

void MyApi::attachObject() 
{ 
    frame->addToJavaScriptWindowObject(QString("MyApi"), this); 
} 

이 코드는 모두를 만들기 위해 당신은 위해 필요한 모든입니다 MyApi 개체의 공개 슬롯이 자바 스크립트에 표시됩니다. MyApi 클래스는 두 개의 공용 슬롯 제공 : (! 예, 슬롯 물건을 반환 할 수 있습니다)

public slots: 
    void doSomething(const QString &param); 
    int doSums(int a, int b); 

가 첫 번째 슬롯은 단순히 디버그 출력에 메시지를 기록을, 두 번째 반환 두 개의 인수 합 .

MyApi.doSomething('Hello from JS page 2!!!!'); 

    sum = MyApi.doSums(2, 3); 
    alert('C++ says the sum is ' + sum); 

을 그리고 그게 전부입니다 : 그들은이 같은 자바 스크립트에서 라고있어! >http://xmelegance.org/devel/qtwebkitextension.tar.gz에서 코드를 다운로드 할 수 있습니다.

+0

이 예제는 불행히도 QT5에서는 작동하지 않습니다. 업데이트 할 기회가 있습니까? 아니면 다른 질문을 열어야합니까? – Alex

관련 문제