/* * loadScript 方法 * @param string js路径(支持本地路径以及http与https协议下远程js获取) * @param function 调用函数 * @return * 如果第二个参数不存在, load 失败,返回 false 。 * 如果第二个参数不存在, load 成功,则返回 true 。 * 如果第二参数存在,则立即调用内部函数,返回执行结果。 * load的内容将以回调函数参数传入: * @param bool err 表明是否正常读取内容 * @param function callback 回一个load函数引用 */ QScriptValue ScriptBinding::loadScript(QScriptContext *context, QScriptEngine *interpreter) { QScriptValue path = context->argument(0); QScriptValue scriptFunc = context->argument(1); if (context->argumentCount() == 0) return QScriptValue(false); if (!path.isString()) return QScriptValue(false); QString pathStr = path.toString().toLower().trimmed(); QString content = ""; bool err = false; // 如果是 HTTP 、 HTTPS 则尝试从远端获取源码 if (pathStr.indexOf("http://") == 0 || pathStr.indexOf("https://") == 0 ) { QNetworkReply* reply; QNetworkAccessManager* manager = new QNetworkAccessManager(); reply = manager->get(QNetworkRequest(QUrl(pathStr))); QEventLoop eventLoop; connect(manager, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit())); eventLoop.exec(); QByteArray responseData; responseData = reply->readAll(); // 通过 Content-Type 来嗅探字节流编码 // 默认为 utf-8 编码 QString charset = QString(reply->rawHeader("Content-Type")).toLower(); QRegExp charsetRegExp("charset=([\\w-]+)\\b"); int pos = charset.indexOf(charsetRegExp); if (pos > 0) { if (charsetRegExp.cap().size() < 2) { charset = "utf-8"; } else { charset = charsetRegExp.cap(1); } } else { charset = "utf-8"; } QTextStream stream(responseData); stream.setCodec(getCodec(charset)); content = QString(stream.readAll()); } else {
QVariant LxHttp::httpRequest(QVariant varMethod, QVariant varUrl , QVariant varPostData)//, QScriptEngine *interpreter { enum LxHttpMethod { GET, POST }; QString url = ""; QString data =""; LxHttpMethod method = GET; if (varMethod.isNull() || varUrl.isNull()) { return QVariant(0); } QString arg = varMethod.toString().trimmed().toUpper(); method = (arg == "POST") ? POST : GET; url = varUrl.toString().trimmed(); if (0 != url.toLower().indexOf("http://")) { return QVariant("URIError: URL is not http://"); } data = varPostData.toString(); QNetworkReply* reply; QNetworkRequest req; QNetworkAccessManager* manager = new QNetworkAccessManager(); if (method == POST) { // post 数据编码 req.setUrl(QUrl(url)); req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); reply = manager->post(req, QUrl(data).toEncoded()); } else { if (data != "") { if (url.indexOf("?") != -1) { if (url.lastIndexOf("&") == url.size() - 1) { url = url + data; } else { url = url + "&" + data; } } else { url= url + "?" + data; } } reply = manager->get(QNetworkRequest(QUrl(url))); } // 开启局部事件循环 QEventLoop eventLoop; connect(manager, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit())); eventLoop.exec(); QByteArray responseData; responseData = reply->readAll(); QString charset = QString(reply->rawHeader("Content-Type")).toLower(); QRegExp charsetRegExp("charset=([\\w-]+)\\b"); int pos = charset.indexOf(charsetRegExp); if (pos > 0) { if (charsetRegExp.cap().size() < 2) { charset = ""; } else { charset = charsetRegExp.cap(1); } } else { charset = ""; } QTextStream stream(responseData); stream.setCodec(QTextCodec::codecForName(QByteArray("utf-8")));//charset.toLocal8Bit() return QVariant(QString(stream.readAll())); }