mirror of
https://github.com/xiaoyifang/goldendict-ng.git
synced 2024-12-18 11:34:05 +00:00
imp. : wrap articleview in webchannel for security reason
This commit is contained in:
parent
f047c5fc9c
commit
8ac2f8dfe1
|
@ -363,7 +363,8 @@ ArticleView::ArticleView( QWidget * parent, ArticleNetworkAccessManager & nm,
|
||||||
SLOT(setActiveDictIds(ActiveDictIds)));
|
SLOT(setActiveDictIds(ActiveDictIds)));
|
||||||
|
|
||||||
channel = new QWebChannel(ui.definition->page());
|
channel = new QWebChannel(ui.definition->page());
|
||||||
attachToJavaScript();
|
agent = new ArticleViewAgent(this);
|
||||||
|
attachWebChannelToHtml();
|
||||||
}
|
}
|
||||||
|
|
||||||
// explicitly report the minimum size, to avoid
|
// explicitly report the minimum size, to avoid
|
||||||
|
@ -1050,7 +1051,7 @@ void ArticleView::linkHovered ( const QString & link )
|
||||||
// Link to other dictionary
|
// Link to other dictionary
|
||||||
QString dictName( Utils::Url::queryItemValue( url, "dict" ) );
|
QString dictName( Utils::Url::queryItemValue( url, "dict" ) );
|
||||||
if( !dictName.isEmpty() )
|
if( !dictName.isEmpty() )
|
||||||
msg = tr( "Definition from dictionary \"%1\": %2" ).arg( dictName ).arg( def );
|
msg = tr( "Definition from dictionary \"%1\": %2" ).arg( dictName , def );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( msg.isEmpty() )
|
if( msg.isEmpty() )
|
||||||
|
@ -1069,15 +1070,13 @@ void ArticleView::linkHovered ( const QString & link )
|
||||||
emit statusBarMessage( msg );
|
emit statusBarMessage( msg );
|
||||||
}
|
}
|
||||||
|
|
||||||
void ArticleView::attachToJavaScript() {
|
void ArticleView::attachWebChannelToHtml() {
|
||||||
|
|
||||||
|
|
||||||
// set the web channel to be used by the page
|
// set the web channel to be used by the page
|
||||||
// see http://doc.qt.io/qt-5/qwebenginepage.html#setWebChannel
|
// see http://doc.qt.io/qt-5/qwebenginepage.html#setWebChannel
|
||||||
ui.definition->page()->setWebChannel(channel, QWebEngineScript::MainWorld);
|
ui.definition->page()->setWebChannel(channel, QWebEngineScript::MainWorld);
|
||||||
|
|
||||||
// register QObjects to be exposed to JavaScript
|
// register QObjects to be exposed to JavaScript
|
||||||
channel->registerObject(QStringLiteral("articleview"), this);
|
channel->registerObject(QStringLiteral("articleview"), agent);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ArticleView::linkClicked( QUrl const & url_ )
|
void ArticleView::linkClicked( QUrl const & url_ )
|
||||||
|
@ -2838,3 +2837,22 @@ void ResourceToSaveHandler::downloadFinished()
|
||||||
deleteLater();
|
deleteLater();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ArticleViewAgent::ArticleViewAgent(QObject *parent)
|
||||||
|
: QObject{parent}
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
ArticleViewAgent::ArticleViewAgent(ArticleView *articleView)
|
||||||
|
: articleView(articleView)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void ArticleViewAgent::onJsActiveArticleChanged(QString const & id){
|
||||||
|
articleView->onJsActiveArticleChanged(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ArticleViewAgent::linkClickedInHtml(QUrl const & url){
|
||||||
|
articleView->linkClickedInHtml(url);
|
||||||
|
}
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#include "globalbroadcaster.h"
|
#include "globalbroadcaster.h"
|
||||||
|
|
||||||
class ResourceToSaveHandler;
|
class ResourceToSaveHandler;
|
||||||
|
class ArticleViewAgent ;
|
||||||
|
|
||||||
/// A widget with the web view tailored to view and handle articles -- it
|
/// A widget with the web view tailored to view and handle articles -- it
|
||||||
/// uses the appropriate netmgr, handles link clicks, rmb clicks etc
|
/// uses the appropriate netmgr, handles link clicks, rmb clicks etc
|
||||||
|
@ -31,6 +32,7 @@ class ArticleView: public QFrame
|
||||||
bool popupView;
|
bool popupView;
|
||||||
Config::Class const & cfg;
|
Config::Class const & cfg;
|
||||||
QWebChannel *channel;
|
QWebChannel *channel;
|
||||||
|
ArticleViewAgent * agent;
|
||||||
Ui::ArticleView ui;
|
Ui::ArticleView ui;
|
||||||
|
|
||||||
QAction pasteAction, articleUpAction, articleDownAction,
|
QAction pasteAction, articleUpAction, articleDownAction,
|
||||||
|
@ -301,7 +303,7 @@ private slots:
|
||||||
void loadFinished( bool ok );
|
void loadFinished( bool ok );
|
||||||
void handleTitleChanged( QString const & title );
|
void handleTitleChanged( QString const & title );
|
||||||
void handleUrlChanged( QUrl const & url );
|
void handleUrlChanged( QUrl const & url );
|
||||||
void attachToJavaScript();
|
void attachWebChannelToHtml();
|
||||||
|
|
||||||
void linkHovered( const QString & link);
|
void linkHovered( const QString & link);
|
||||||
void contextMenuRequested( QPoint const & );
|
void contextMenuRequested( QPoint const & );
|
||||||
|
@ -436,4 +438,20 @@ private:
|
||||||
bool alreadyDone;
|
bool alreadyDone;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class ArticleViewAgent : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
ArticleView* articleView;
|
||||||
|
public:
|
||||||
|
explicit ArticleViewAgent(QObject *parent = nullptr);
|
||||||
|
ArticleViewAgent(ArticleView* articleView);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
Q_INVOKABLE void onJsActiveArticleChanged(QString const & id);
|
||||||
|
Q_INVOKABLE void linkClickedInHtml( QUrl const & );
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue