Skip to content

Commit

Permalink
Fix javascript errors when try to evaluate undefined variables
Browse files Browse the repository at this point in the history
  • Loading branch information
timonwong committed May 29, 2013
1 parent a510fac commit 9ff31d0
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 9 deletions.
2 changes: 1 addition & 1 deletion article_maker.cc
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ std::string ArticleMaker::makeHtmlHeader( QString const & word,
if ( icon.size() )
result += "<link rel=\"icon\" type=\"image/png\" href=\"qrcx://localhost/flags/" + Html::escape( icon.toUtf8().data() ) + "\" />\n";

result += "<script language=\"JavaScript\">"
result += "<script type=\"text/javascript\">"
"function gdMakeArticleActive( newId ) {"
"if ( gdCurrentArticle != 'gdfrom-' + newId ) {"
"document.getElementById( gdCurrentArticle ).className = 'gdarticle';"
Expand Down
19 changes: 12 additions & 7 deletions articleview.cc
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,13 @@ using std::map;
using std::list;


static QVariant evaluateJavaScriptVariableSafe( QWebFrame * frame, const QString & variable )
{
return frame->evaluateJavaScript(
QString( "( typeof( %1 ) !== 'undefined' && %1 !== undefined ) ? %1 : null;" )
.arg( variable ) );
}

ArticleView::ArticleView( QWidget * parent, ArticleNetworkAccessManager & nm,
std::vector< sptr< Dictionary::Class > > const & allDictionaries_,
Instances::Groups const & groups_, bool popupView_,
Expand Down Expand Up @@ -369,9 +376,8 @@ unsigned ArticleView::getGroup( QUrl const & url )

QStringList ArticleView::getArticlesList()
{
return ui.definition->page()->mainFrame()->
evaluateJavaScript( "gdArticleContents;" ).toString().
trimmed().split( ' ', QString::SkipEmptyParts );
return evaluateJavaScriptVariableSafe( ui.definition->page()->mainFrame(), "gdArticleContents" )
.toString().trimmed().split( ' ', QString::SkipEmptyParts );
}

QString ArticleView::getActiveArticleId()
Expand All @@ -385,8 +391,7 @@ QString ArticleView::getActiveArticleId()

QString ArticleView::getCurrentArticle()
{
QVariant v = ui.definition->page()->mainFrame()->evaluateJavaScript(
QString( "gdCurrentArticle;" ) );
QVariant v = evaluateJavaScriptVariableSafe( ui.definition->page()->mainFrame(), "gdCurrentArticle" );

if ( v.type() == QVariant::String )
return v.toString();
Expand Down Expand Up @@ -460,7 +465,7 @@ void ArticleView::tryMangleWebsiteClickedUrl( QUrl & url, Contexts & contexts )

if ( isFramedArticle( ca ) )
{
QVariant result = ui.definition->page()->currentFrame()->evaluateJavaScript( "gdLastUrlText;" );
QVariant result = evaluateJavaScriptVariableSafe( ui.definition->page()->currentFrame(), "gdLastUrlText" );

if ( result.type() == QVariant::String )
{
Expand Down Expand Up @@ -1096,7 +1101,7 @@ void ArticleView::forward()

bool ArticleView::hasSound()
{
QVariant v = ui.definition->page()->mainFrame()->evaluateJavaScript( "gdAudioLink;" );
QVariant v = evaluateJavaScriptVariableSafe( ui.definition->page()->mainFrame(), "gdAudioLink" );
if ( v.type() == QVariant::String )
soundScript = v.toString();
else
Expand Down
2 changes: 1 addition & 1 deletion xdxf2html.cc
Original file line number Diff line number Diff line change
Expand Up @@ -301,7 +301,7 @@ string convert( string const & in, DICT_TYPE type, map < string, string > const
QDomNode parent = el.parentNode();
if( !parent.isNull() )
{
el_script.setAttribute( "language", "JavaScript" );
el_script.setAttribute( "type", "text/javascript" );
parent.replaceChild( el_script, el );

QDomText el_txt = dd.createTextNode( makeAudioLinkScript( string( "\"" ) + url.toEncoded().data() + "\"",
Expand Down

0 comments on commit 9ff31d0

Please sign in to comment.