2016-09-22 2 views

답변

4

다른 옵션은 URL qrc:///qtwebchannel/qwebchannel.js에 필요한 스크립트 액세스로드 할 수 있습니다

주의 사항 : QWebEngineView 내에서 페이지를보고있는 경우에만 해당 URL을 사용할 수 있습니다

  • . 그렇지 않으면 웹 서버에 API 파일을로드해야 할 수 있습니다.

전제 조건 :

  • 당신의 .pro 파일에 QT += webchannel을 추가하고 Qt의 QWebChannel JS API의 코드를 실행할 수 runJavaScript()를 사용 qmake

을 실행

내 선호되는 방법 왜냐하면 그것은 단순 해 보이고 지금까지 믿을만했기 때문입니다. runJavaScript() 메서드는 JS 코드가 실행될 때까지 현재 스레드를 차단하지 않으므로이 코드가 완료 될 때까지 API가 설정되지 않을 수 있습니다.

QFile apiFile(":/qtwebchannel/qwebchannel.js"); //load the API from the resources 
if(!apiFile.open(QIODevice::ReadOnly)) 
    qDebug()<<"Couldn't load Qt's QWebChannel API!"; 
QString apiScript = QString::fromLatin1(apiFile.readAll()); 
apiFile.close(); 
QWebEngineView view; //your custom QWebEngineView 
view.page().runJavaScript(apiScript); 

Qt의 QWebChannel JS API를로드하는 코드를 실행 runJavaScript() 사용 :

나는 그들이 외부 JS 파일을로드하는 것을 목표로 그들은 여전히 ​​작동한다 이러한 방법을 시도하지 않았지만. 제안 된 방법 중 하나는 사용하는 다른 라이브러리에 따라 편리하게 사용할 수 있습니다.

이 Qt의 문서에서 권장하는 기본 방법입니다 : 웹 페이지에서 <script> 태그를 사용

. 페이지가로드 된 후 바로 API를 제공한다는 이점이 있습니다. 사이트의 소유자가 아닌 경우 고통 스러울 수있는 웹 페이지의 HTML을 수정해야한다는 단점이 있습니다.

는 C++ 측에 QWebChannel 객체를 생성 잊지 마세요 :

QWebChannel* channel_ = new QWebChannel(view.page()); 
//attach it to the QWebEnginePage 
view.page()->setWebChannel(channel_); 
//register a QObject to be exposed to JavaScript 
channel_->registerObject(QStringLiteral("jshelper"), this); 

이 답변은 Qt의 문서에 추가로 생각, 그래서 당신이 뭔가를 추가하려면 주시기했다 그렇게해라.

버전 : Qt 5.6.1

출처 :

관련 문제