1
mirror of https://invent.kde.org/network/falkon.git synced 2024-09-21 09:42:10 +02:00

GreaseMonkey: Run usercscripts in all frames on page

This commit is contained in:
nowrep 2013-07-29 17:55:35 +02:00
parent 7a75153b9f
commit 567d6c74f4
4 changed files with 27 additions and 17 deletions

View File

@ -16,6 +16,7 @@ Version 1.5.0
* GreaseMonkey: added icon in statusbar
* GreaseMonkey: added support for GM_Settings
* GreaseMonkey: fixed userscripts when first loading plugin
* GreaseMonkey: run userscripts in all frames on page
* oxygen: set rounded corners for tooltips
* oxygen: workaround for transparent background of tooltips
* X11: Set correct WM_CLASS property to windows

View File

@ -649,7 +649,7 @@ QString QzTools::escape(const QString &string)
}
#if defined(QZ_WS_X11) && !defined(NO_X11)
void *QzTools::X11Display(const QWidget* widget)
void* QzTools::X11Display(const QWidget* widget)
{
Q_UNUSED(widget)

View File

@ -196,31 +196,40 @@ void GM_Manager::showNotification(const QString &message, const QString &title)
void GM_Manager::pageLoadStart()
{
QWebFrame* frame = qobject_cast<QWebFrame*>(sender());
if (!frame) {
QWebFrame* mainFrame = qobject_cast<QWebFrame*>(sender());
if (!mainFrame) {
return;
}
const QString &urlScheme = frame->url().scheme();
const QString &urlString = frame->url().toEncoded();
const QString &urlScheme = mainFrame->url().scheme();
const QString &urlString = mainFrame->url().toEncoded();
if (!canRunOnScheme(urlScheme)) {
return;
}
frame->addToJavaScriptWindowObject("_qz_greasemonkey", m_jsObject);
// Run it in every frame
QList<QWebFrame*> frames;
frames.append(mainFrame);
while (!frames.isEmpty()) {
QWebFrame* frame = frames.takeFirst();
if (frame) {
mainFrame->addToJavaScriptWindowObject("_qz_greasemonkey", m_jsObject);
foreach (GM_Script* script, m_startScripts) {
if (script->match(urlString)) {
frame->evaluateJavaScript(m_bootstrap + script->script());
}
}
foreach (GM_Script* script, m_startScripts) {
if (script->match(urlString)) {
mainFrame->evaluateJavaScript(m_bootstrap + script->script());
}
}
foreach (GM_Script* script, m_endScripts) {
if (script->match(urlString)) {
const QString &jscript = QString("window.addEventListener(\"DOMContentLoaded\","
"function(e) { \n%1\n }, false);").arg(m_bootstrap + script->script());
frame->evaluateJavaScript(jscript);
foreach (GM_Script* script, m_endScripts) {
if (script->match(urlString)) {
const QString &jscript = QString("window.addEventListener(\"DOMContentLoaded\","
"function(e) { \n%1\n }, false);").arg(m_bootstrap + script->script());
mainFrame->evaluateJavaScript(jscript);
}
}
frames += frame->childFrames();
}
}
}

View File

@ -41,7 +41,7 @@ PluginSpec GM_Plugin::pluginSpec()
spec.name = "GreaseMonkey";
spec.info = "Userscripts for QupZilla";
spec.description = "Provides support for userscripts (www.userscripts.org)";
spec.version = "0.4.1";
spec.version = "0.4.2";
spec.author = "David Rosca <nowrep@gmail.com>";
spec.icon = QPixmap(":gm/data/icon.png");
spec.hasSettings = true;