Dans un récent projet j'ai utilisé la technique suivante:
void VideoWebPage::urlLoaded(bool ok)
{
static const QString javascript =
"function installCallbacks() " \
"{ " \
" var videoTags = document.getElementsByTagName('object'); " \
" for (var i = 0; i < videoTags.length; ++i) " \
" { " \
" if (videoTags[i].type == 'application/x-qt-plugin') " \
" { " \
" if (videoTags[i].playing) " \
" { " \
" videoTags[i].playing.connect(playingSlot); " \
" } " \
" } " \
" } " \
"} " \
\
"function playingSlot(videoId) " \
"{ " \
" var playEvent=document.createEvent('Events'); " \
" playEvent.initEvent('play', true, false); " \
" document.getElementById(videoId).dispatchEvent(playEvent); " \
"} " \
"installCallbacks(); ";
mainFrame()->evaluateJavaScript(javascript);
}
Cette méthode semble toutes <object>
balises et relie le signal playing
à la fonction Javascript playingSlot()
. La fonction playingSlot()
crée à son tour un objet Event
portant le nom play
et le distribue en tant qu'événement DOM ordinaire. Le fichier HTML ressemble alors à:
<html>
<head>
<script language="text/javascript">
void init()
{
document.getElementById('id1').addEventListener('play', onPlay);
}
void onPlay(event)
{
alert('playing');
}
</script>
</head>
<body onload='init()'>
<object id='id1' type='application/x-qt-plugin'>
</object>
</body>
</html>
Ceci est bien sûr travailler avec le plugin Qt Widgets. Je ne l'ai pas testé avec du HTML pur (c'est-à-dire où aucun plugin Qt n'est utilisé).