QString Utils::jsFromScriptFile(const QString& scriptPath, const Encoding& enc) { QFile jsFile(scriptPath); if (jsFile.exists() && jsFile.open(QFile::ReadOnly)) { QString scriptBody = enc.decode(jsFile.readAll()); // Remove CLI script heading if (scriptBody.startsWith("#!") && !jsFile.fileName().endsWith(COFFEE_SCRIPT_EXTENSION)) { scriptBody.prepend("//"); } if (jsFile.fileName().endsWith(COFFEE_SCRIPT_EXTENSION)) { QVariant result = Utils::coffee2js(scriptBody); if (result.toStringList().at(0) == "false") { return QString(); } else { scriptBody = result.toStringList().at(1); } } jsFile.close(); return scriptBody; } else { return QString(); } }
static QString jsFromScriptFile(const QString& scriptPath, const QString& scriptLanguage, const Encoding& enc) { QFile jsFile(scriptPath); if (jsFile.exists() && jsFile.open(QFile::ReadOnly)) { QString scriptBody = enc.decode(jsFile.readAll()); jsFile.close(); // Remove CLI script heading if (scriptBody.startsWith("#!")) { int len = scriptBody.indexOf(QRegExp("[\r\n]")); if (len == -1) { len = scriptBody.length(); } scriptBody.remove(0, len); } // If a language is specified and is not "javascript", reject it. if (scriptLanguage != "javascript" && !scriptLanguage.isNull()) { QString errMessage = QString("Unsupported language: %1").arg(scriptLanguage); Terminal::instance()->cerr(errMessage); qWarning("%s", qPrintable(errMessage)); return QString(); } return scriptBody; } else { return QString(); } }
bool Utils::injectJsInFrame(const QString &jsFilePath, const Encoding &jsFileEnc, const QString &libraryPath, QWebFrame *targetFrame, const bool startingScript) { // Don't do anything if an empty string is passed QFile jsFile(findScript(jsFilePath, libraryPath)); if (jsFile.exists() && jsFile.open(QFile::ReadOnly)) { QString scriptBody = jsFileEnc.decode(jsFile.readAll()); // Remove CLI script heading if (scriptBody.startsWith("#!") && !jsFile.fileName().endsWith(COFFEE_SCRIPT_EXTENSION)) { scriptBody.prepend("//"); } if (jsFile.fileName().endsWith(COFFEE_SCRIPT_EXTENSION)) { QVariant result = Utils::coffee2js(scriptBody); if (result.toStringList().at(0) == "false") { if (startingScript) { Terminal::instance()->cerr(result.toStringList().at(1)); exit(1); } else { qWarning() << qPrintable(result.toStringList().at(1)); scriptBody = QString(); } } else { scriptBody = result.toStringList().at(1); } } // Execute JS code in the context of the document targetFrame->evaluateJavaScript(scriptBody); jsFile.close(); return true; } else { if (startingScript) { Terminal::instance()->cerr(QString("Can't open '%1'").arg(jsFilePath)); } else { qWarning("Can't open '%s'", qPrintable(jsFilePath)); } } return false; }