mirror of
https://invent.kde.org/network/falkon.git
synced 2024-12-19 18:26:34 +01:00
parent
0eef26f843
commit
171267cfb0
@ -194,44 +194,41 @@ void GM_Manager::showNotification(const QString &message, const QString &title)
|
||||
mApp->desktopNotifications()->showNotification(icon, title.isEmpty() ? tr("GreaseMonkey") : title, message);
|
||||
}
|
||||
|
||||
void GM_Manager::pageLoadStart()
|
||||
void GM_Manager::frameLoadStart()
|
||||
{
|
||||
QWebFrame* mainFrame = qobject_cast<QWebFrame*>(sender());
|
||||
if (!mainFrame) {
|
||||
QWebFrame* frame = qobject_cast<QWebFrame*>(sender());
|
||||
if (!frame) {
|
||||
return;
|
||||
}
|
||||
|
||||
const QString urlScheme = mainFrame->url().scheme();
|
||||
const QString urlString = mainFrame->url().toEncoded();
|
||||
const QUrl url = frame->url().isEmpty() ? frame->baseUrl() : frame->url();
|
||||
const QString urlScheme = url.scheme();
|
||||
const QString urlString = url.toEncoded();
|
||||
|
||||
if (!canRunOnScheme(urlScheme)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 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);
|
||||
frame->addToJavaScriptWindowObject(QSL("_qz_greasemonkey"), m_jsObject);
|
||||
|
||||
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());
|
||||
mainFrame->evaluateJavaScript(jscript);
|
||||
}
|
||||
}
|
||||
frames += frame->childFrames();
|
||||
foreach (GM_Script* script, m_startScripts) {
|
||||
if (script->match(urlString)) {
|
||||
frame->evaluateJavaScript(m_bootstrap + script->script());
|
||||
}
|
||||
}
|
||||
|
||||
foreach (GM_Script* script, m_endScripts) {
|
||||
if (script->match(urlString)) {
|
||||
const QString jscript = QString(QSL("window.addEventListener(\"DOMContentLoaded\","
|
||||
"function(e) { \n%1\n }, false);")).arg(m_bootstrap + script->script());
|
||||
frame->evaluateJavaScript(jscript);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GM_Manager::frameCreated(QWebFrame *frame)
|
||||
{
|
||||
connect(frame, SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(frameLoadStart()));
|
||||
}
|
||||
|
||||
void GM_Manager::load()
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include <QHash>
|
||||
|
||||
class QUrl;
|
||||
class QWebFrame;
|
||||
class QNetworkRequest;
|
||||
|
||||
class BrowserWindow;
|
||||
@ -67,7 +68,8 @@ public slots:
|
||||
void mainWindowCreated(BrowserWindow* window);
|
||||
void mainWindowDeleted(BrowserWindow* window);
|
||||
|
||||
void pageLoadStart();
|
||||
void frameLoadStart();
|
||||
void frameCreated(QWebFrame* frame);
|
||||
|
||||
private slots:
|
||||
void load();
|
||||
|
@ -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.6";
|
||||
spec.version = "0.5.0";
|
||||
spec.author = "David Rosca <nowrep@gmail.com>";
|
||||
spec.icon = QPixmap(":gm/data/icon.png");
|
||||
spec.hasSettings = true;
|
||||
@ -114,7 +114,8 @@ QNetworkReply* GM_Plugin::createRequest(QNetworkAccessManager::Operation op, con
|
||||
|
||||
void GM_Plugin::webPageCreated(WebPage* page)
|
||||
{
|
||||
connect(page->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), m_manager, SLOT(pageLoadStart()));
|
||||
m_manager->frameCreated(page->mainFrame());
|
||||
connect(page, SIGNAL(frameCreated(QWebFrame*)), m_manager, SLOT(frameCreated(QWebFrame*)));
|
||||
}
|
||||
|
||||
#if QT_VERSION < 0x050000
|
||||
|
Loading…
Reference in New Issue
Block a user