青霜框架开发SDK文档(C接口)

void qsInit(const qsSettings* settings)


初始化,qsSettings定义为:

typedef enum {
    QS_PROXY_NONE,
    QS_PROXY_HTTP,
    QS_PROXY_SOCKS4,
    QS_PROXY_SOCKS4A,
    QS_PROXY_SOCKS5,
    QS_PROXY_SOCKS5HOSTNAME
} qsProxyType;

typedef struct {
    qsProxyType type;
    char hostname[100];
    unsigned short port;
    char username[50];
    char password[50];
} qsProxy;

typedef void(QS_CALL_TYPE* qsOnBlinkThreadInitCallback)(void* param);

typedef struct _qsSettings {
    qsProxy proxy;
    unsigned int mask; // 208 offset
    qsOnBlinkThreadInitCallback blinkThreadInitCallback;
    void* blinkThreadInitCallbackParam;
    intptr_t version;
    const wchar_t* mainDllPath;
    HMODULE mainDllHandle;
} qsSettings;

void qsUninit()


反初始化,执行一些清理操作。

qsSettings* qsCreateInitSettings()


创建一个设置项。

void qsSetInitSettings(qsSettings* settings, const char* name, const char* value)


初始化设置。

qsWebView qsCreateWebView()


创建一个webview,但不创建真窗口。一般用在离屏渲染里,如游戏。

void qsDestroyWebView(qsWebView)


销毁指定的WebView。qsWebView可以理解为指定WebView的句柄或指针,下同。

qsWebView qsCreateWebWindow(qsWindowType type, HWND parent, int x, int y, int width, int height)


创建一个带真实窗口的qsWebView。
type:WKE_WINDOW_TYPE_POPUP,普通窗口;
WKE_WINDOW_TYPE_TRANSPARENT,透明窗口,qs内部通过layer window实现;
WKE_WINDOW_TYPE_CONTROL,嵌入在父窗口里的子窗口,此时parent需要被设置。

qsWebView qsCreateWebCustomWindow(HWND parent, DWORD style, DWORD styleEx, int x, int y, int width, int height)


创建一个子窗口。

void qsMoveToCenter(qsWebView webview)


窗口在父窗口或屏幕里居中。

void qsSetAutoDrawToHwnd(qsWebView webview, BOOL b)


离屏模式下控制是否自动上屏。

qsStringPtr qsCreateString(const utf8* str, size_t length)


【可跨线程】创建qsString结构体。qsStringPtr定义如下:

struct qsString;
typedef qsString* qsStringPtr;

qsStringPtr qsCreateStringWithoutNullTermination(const utf8* str, size_t length)


【可跨线程】创建qsString结构体。

void qsDeleteString(qsStringPtr str)


【可跨线程】删除qsString结构体。

size_t qsGetStringLen(qsStringPtr str)


【可跨线程】获取qsString结构体长度。

const utf8* qsGetString(qsStringPtr str)


获取qsString结构体。

void qsSetProxy(qsWebView webView, const qsProxy* proxy)


设置指定webView的代理,每个webView单独生效,而标准版是全局的。

typedef enum {
    QS_PROXY_NONE,
    QS_PROXY_HTTP,
    QS_PROXY_SOCKS4,
    QS_PROXY_SOCKS4A,
    QS_PROXY_SOCKS5,
    QS_PROXY_SOCKS5HOSTNAME
} qsProxyType;

typedef struct {
    qsProxyType type;
    char hostname[100];
    unsigned short port;
    char username[50];
    char password[50];
} qsProxy;

void qsSetDebugConfig(qsWebView webView, const char* debugString, const char* param)


设置一些实验性选项。debugString可用参数有:
showDevTools:开启开发者工具,此时param要填写开发者工具的资源路径,如file:///c:/miniblink-release/front_end/inspector.html,注意:路径中不能有中文,并且必须为完整路径。
wakeMinInterval:设置帧率,默认值是10,值越大帧率越低。
drawMinInterval:设置帧率,默认值是3,值越大帧率越低。
antiAlias:设置抗锯齿渲染,param必须设置为“1”。
minimumFontSize:最小字体。
minimumLogicalFontSize:最小逻辑字体。
defaultFontSize:默认字号。
defaultFixedFontSize:默认Fixed字号。
imageEnable:是否打开无图模式,param为“0”表示开启无图模式。
jsEnable:是否禁用js,param为“0”表示禁用。

void qsNetSetData(qsNetJob jobPtr, void* buf, int len)


此接口一般在qsOnLoadUrlBegin接口回调qsLoadUrlBeginCallback中使用(涉及qsNetJob jobPtr参数的接口基本都是,下同),在网络访问执行前,设置指定的数据到网络层,数据内容可以为js代码,图片,字符串,数据块等任意类型,设置此接口后会触发OnLoadUrlEnd事件。
jobPtr为网络任务id,通常由QS回传给qsLoadUrlBeginCallback,只在当次网络任务中有效,下同。

注意:此接口是在网络访问前设置数据,此接口对性能影响较大,慎用。

void qsNetHookRequest(qsNetJob jobPtr)


拦截某次网络请求,此接口会在接受到真正网络数据后触发OnLoadUrlEnd事件,你可以在qsLoadUrlEndCallback中修改接收到的数据。

注意:此接口是在接收到实际的网络数据后进行拦截,而qsNetSetData是在数据尚未发送前进行插入。

void qsNetChangeRequestUrl(qsNetJob jobPtr, const char* url)


【可跨线程】修改某次网络请求的URL。

void qsNetContinueJob(qsNetJob jobPtr)


继续某次异步网络请求,参考qsNetHoldJobToAsynCommit。

const qsSlist* qsNetGetRawHttpHeadInBlinkThread(qsNetJob jobPtr)


获取渲染线程中curl原始请求数据头。qsSlist是一个链表结构,具体定义为:

typedef struct _qsSlist {
    char* data;
    struct _qsSlist* next;
} qsSlist;

const qsSlist* qsNetGetRawResponseHeadInBlinkThread(qsNetJob jobPtr)


获取渲染线程中的原始响应数据头。

void qsNetHoldJobToAsynCommit(qsNetJob jobPtr)


当在qsOnLoadUrlBegin中里拦截到一个请求后需要进行一些耗时操作时,可以调用本接口,耗时操作完成后需要调用qsNetContinueJob接口以通知QS让此次请求继续进行。

注意:返回true代表成功,false代表调用失败,如失败则不能再调用qsNetContinueJob。

void qsNetCancelRequest(qsNetJob jobPtr)


取消某次网络请求。

void qsNetOnResponse(qsWebView webviewHandle, qsNetResponseCallback callback, void* param)


收到服务器Response时触发此回调,param可以为自定义参数,QS会直接传给回给回调参数(下同)。qsNetResponseCallback定义为:

typedef BOOL(QS_CALL_TYPE *qsNetResponseCallback)(qsWebView webView, void* param, const utf8* url, qsNetJob job);

注意:此接口的回调是在另外个线程中进行。

void qsNetSetWebsocketCallback(qsWebView webview, const qsWebsocketHookCallbacks* callbacks, void* param)


建立WebSocket时触发此回调,qsWebsocketHookCallbacks定义为:

struct qsString;
typedef qsString* qsStringPtr;
typedef void* qsWebSocketChannel;

typedef struct _qsWebsocketHookCallbacks {
    qsStringPtr (QS_CALL_TYPE* onWillConnect)(qsWebView webView, void* param, qsWebSocketChannel channel, const utf8* url, BOOL* needHook);
    BOOL (QS_CALL_TYPE* onConnected)(qsWebView webView, void* param, qsWebSocketChannel channel);
    qsStringPtr (QS_CALL_TYPE* onReceive)(qsWebView webView, void* param, qsWebSocketChannel channel, int opCode, const char* buf, size_t len, BOOL* isContinue);
    qsStringPtr (QS_CALL_TYPE* onSend)(qsWebView webView, void* param, qsWebSocketChannel channel, int opCode, const char* buf, size_t len, BOOL* isContinue);
    void (QS_CALL_TYPE* onError)(qsWebView webView, void* param, qsWebSocketChannel channel);
} qsWebsocketHookCallbacks;

void qsNetSendWsText(qsWebSocketChannel channel, const char* buf, size_t len)


设置套接字内容。

void qsNetSendWsBlob(qsWebSocketChannel channel, const char* buf, size_t len)


设置套接字Blob对象。

void qsNetEnableResPacket(qsWebView webviewHandle, const WCHAR* pathName)


是否允许以res://方式读取打包后的资源文件。

qsPostBodyElements* qsNetGetPostBody(qsNetJob jobPtr)


获取此请求中的post数据。qsPostBodyElements定义为:

typedef struct _qsPostBodyElement {
    int size;
    qsHttBodyElementType type;
    qsMeqSuf* data;
    qsStringPtr filePath;
    __int64 fileStart;
    __int64 fileLength; // -1 means to the end of the file.
} qsPostBodyElement;

typedef struct _qsPostBodyElements {
    int size;
    qsPostBodyElement** element;
    size_t elementSize;
    bool isDirty;
} qsPostBodyElements;

注意:只有当请求类型是post时才有效果。

qsPostBodyElements* qsNetCreatePostBodyElements(qsWebView webView, size_t length)


创建一个新的post数据包。

注意:必须是post请求才能设置。

void qsNetFreePostBodyElements(qsPostBodyElements* elements)


销毁post数据包。

qsPostBodyElement* qsNetCreatePostBodyElement(qsWebView webView)


创建post数据。

void qsNetFreePostBodyElement(qsPostBodyElement* element)


【可跨线程】销毁post数据。

qsWebUrlRequestPtr qsNetCreateWebUrlRequest(const utf8* url, const utf8* method, const utf8* mime)


【可跨线程】创建一个网络请求。qsWebUrlRequestPtr定义为:

typedef struct qsWebUrlRequest* qsWebUrlRequestPtr;

void qsNetAddHTTPHeaderFieldToUrlRequest(qsWebUrlRequestPtr request, const utf8* name, const utf8* value)


【可跨线程】在指定网络请求里添加请求头。

int qsNetStartUrlRequest(qsWebView webView, qsWebUrlRequestPtr request, void* param, const qsUrlRequestCallbacks* callbacks)


【可跨线程】开始指定的网络请求。qsUrlRequestCallbacks定义为:

typedef struct qsWebUrlRequest* qsWebUrlRequestPtr;
typedef struct qsWebUrlResponse* qsWebUrlResponsePtr;

typedef void(QS_CALL_TYPE* qsOnUrlRequestWillRedirectCallback)(qsWebView webView, void* param, qsWebUrlRequestPtr oldRequest, qsWebUrlRequestPtr request, qsWebUrlResponsePtr redirectResponse);
typedef void(QS_CALL_TYPE* qsOnUrlRequestDidReceiveResponseCallback)(qsWebView webView, void* param, qsWebUrlRequestPtr request, qsWebUrlResponsePtr response);
typedef void(QS_CALL_TYPE* qsOnUrlRequestDidReceiveDataCallback)(qsWebView webView, void* param, qsWebUrlRequestPtr request, const char* data, int dataLength);
typedef void(QS_CALL_TYPE* qsOnUrlRequestDidFailCallback)(qsWebView webView, void* param, qsWebUrlRequestPtr request, const utf8* error);
typedef void(QS_CALL_TYPE* qsOnUrlRequestDidFinishLoadingCallback)(qsWebView webView, void* param, qsWebUrlRequestPtr request, double finishTime);

typedef struct _qsUrlRequestCallbacks {
    qsOnUrlRequestWillRedirectCallback willRedirectCallback;
    qsOnUrlRequestDidReceiveResponseCallback didReceiveResponseCallback;
    qsOnUrlRequestDidReceiveDataCallback didReceiveDataCallback;
    qsOnUrlRequestDidFailCallback didFailCallback;
    qsOnUrlRequestDidFinishLoadingCallback didFinishLoadingCallback;
} qsUrlRequestCallbacks;

int qsNetGetHttpStatusCode(qsWebUrlResponsePtr response)


获取请求响应码。

qsRequestType qsNetGetRequestMethod(qsNetJob jobPtr)


获取此请求的method,qsRequestType定义如下:

typedef enum _qsRequestType {
    kQsRequestTypeInvalidation,
    kQsRequestTypeGet,
    kQsRequestTypePost,
    kQsRequestTypePut,
} qsRequestType;

__int64 qsNetGetExpectedContentLength(qsWebUrlResponsePtr response)


获取响应内容长度。

const utf8* qsNetGetResponseUrl(qsWebUrlResponsePtr response)


获取响应URL。

void qsNetCancelWebUrlRequest(int requestId)


【可跨线程】取消指定的网络请求。

void qsSetViewProxy(qsWebView webView, const qsProxy* proxy)


设置指定webView的代理,每个webView单独生效,而标准版是全局的,qsProxy定义为:

typedef enum {
    QS_PROXY_NONE,
    QS_PROXY_HTTP,
    QS_PROXY_SOCKS4,
    QS_PROXY_SOCKS4A,
    QS_PROXY_SOCKS5,
    QS_PROXY_SOCKS5HOSTNAME
} qsProxyType;

typedef struct {
    qsProxyType type;
    char hostname[100];
    unsigned short port;
    char username[50];
    char password[50];
} qsProxy;

void qsNetSetMIMEType(qsNetJob jobPtr, const char* type)


设置http请求的MIME类型。

const char* qsNetGetMIMEType(qsNetJob jobPtr)


获取http请求的MIME类型。

const utf8* qsNetGetHTTPHeaderField(qsNetJob job, const char* key, BOOL fromRequestOrResponse)


获取请求头内容。fromRequestOrResponse为1表示请求,0表示响应。

void qsNetSetHTTPHeaderField(qsNetJob jobPtr, const wchar_t* key, const wchar_t* value, BOOL response)


设置http请求(或file:///协议)的http头。

注意:response需要一直设置成0。

void qsSetMouseEnabled(qsWebView webView, BOOL b)


【可跨线程】是否允许鼠标,默认允许。

void qsSetTouchEnabled(qsWebView webView, BOOL b)


【可跨线程】是否允许触屏,默认不允许,开启后,鼠标消息将自动转换成触屏消息。

void qsSetSystemTouchEnabled(qsWebView webView, BOOL b)


【可跨线程】设置操作系统是否发送触屏消息,默认不允许。

void qsSetContextMenuEnabled(qsWebView webView, BOOL b)


【可跨线程】设置是否允许菜单,默认允许。

void qsSetNavigationToNewWindowEnable(qsWebView webView, BOOL b)


【可跨线程】当有新页面需要打开时(如标签),是否在新窗口打开,默认是当前窗口,如开启,则会触发qsOnCreateView回调接口。

void qsSetHeadlessEnabled(qsWebView webView, BOOL b)


【可跨线程】开启无头模式。开启后,将不会渲染页面,提升了网页性能,默认关闭。

void qsSetDragDropEnable(qsWebView webView, BOOL b)


【可跨线程】设置是否支持拖拽页面元素,默认开启。

void qsSetDragEnable(qsWebView webView, BOOL b)


【可跨线程】设置是否支持拖拽文件到页面,默认开启。

void qsSetContextMenuItemShow(qsWebView webView, qsMenuItemId item, BOOL isShow)


【可跨线程】设置是否在菜单中显示指定的操作。qsMenuItemId定义为:

typedef enum _qsMenuItemId {
    kQsMenuSelectedAllId = 1 << 1,
    kQsMenuSelectedTextId = 1 << 2,
    kQsMenuUndoId = 1 << 3,
    kQsMenuCopyImageId = 1 << 4,
    kQsMenuInspectElementAtId = 1 << 5,
    kQsMenuCutId = 1 << 6,
    kQsMenuPasteId = 1 << 7,
    kQsMenuPrintId = 1 << 8,
    kQsMenuGoForwardId = 1 << 9,
    kQsMenuGoBackId = 1 << 10,
    kQsMenuReloadId = 1 << 11,
} qsMenuItemId;

void qsSetHandle(qsWebView webView, HWND wnd)


设置qsWebView对应的窗口句柄,用于无头模式,如果是qsCreateWebWindow创建的webview,已经自带窗口句柄。

void qsSetHandleOffset(qsWebView webView, int x, int y)


设置无头模式下的绘制偏移,在某些情况下(主要是离屏模式),绘制的地方不在真窗口的(0,0)处,就需要手动调用此接口。

HWND qsGetHostHWND(qsWebView webView)


获取webveiw对应的窗口句柄。

HWND qsSetTransparent(qsWebView webviewHandle, BOOL transparent)


页面设置为透明。

void qsSetViewSettings(qsWebView webviewHandle, const qsViewSettings* settings)


设置页面设置项,qsViewSettings定义为:

typedef struct _qsViewSettings {
    int size;
    unsigned int bgColor;
} qsViewSettings;

void qsSetCspCheckEnable(qsWebView webView, BOOL b)


【可跨线程】是否开启跨域检查,默认开启。关闭后可以做任何跨域操作,如跨域ajax,跨域设置iframe等。

void qsSetNpapiPluginsEnabled(qsWebView webView, BOOL b)


【可跨线程】是否允许npapi插件,如flash,ffmpeg等,默认允许。

void qsSetMemoryCacheEnable(qsWebView webView, BOOL b)


【可跨线程】开启内存缓存,网页的图片等都会在内存缓存里,默认开启。

注意:尽量不要关闭,虽然关闭会降低内存使用,但容易引起一些问题。

void qsSetCookie(qsWebView webView, const utf8* url, const utf8* cookie)


【可跨线程】设置页面cookie,针对每个webView单独生效。

注意:
1、cookie必须符合curl的标准写法。如:PERSONALIZE=123;expires=Monday 13-Jun-2022 03:04:55 GMT; domain=.fidelity.com; path=/; secure。
2、VIP版Cookie可针对每个webView单独生效,而标准版是全局的。

void qsSetCookieEnabled(qsWebView webView, BOOL enable)


【可跨线程】是否开启cookie,默认开启。

注意:这个接口只是设置blink,并不会设置curl,所以还是会生成curl的cookie文件。

void qsSetCookieJarPath(qsWebView webView, const WCHAR* path)


【可跨线程】设置cookie文件的目录,默认是程序运行的当前目录,文件名为:cookie.dat。

注意:path是文件目录路径,不包括文件名,文件目录必须确保存在,否则调用会失败。

void qsSetCookieJarFullPath(qsWebView webView, const WCHAR* path)


【可跨线程】设置cookie文件的全路径,默认是程序运行的当前目录,默认文件名为cookie.dat。

注意:是全路径,包括cookie文件名,文件必须确保存在,否则调用会失败。

void qsSetLocalStorageFullPath(qsWebView webView, const WCHAR* path)


【可跨线程】设置localStorage的完整路径,针对每个webView单独生效。

注意:
1、VIP版localStorage可针对每个webView单独生效,而标准版是全局的。
2、全路径,文件夹必须确保存在,否则调用会失败。

const utf8* qsGetTitle(qsWebView webView)


获取页面标题。

const utf8* qsGetUrl(qsWebView webView)


获取页面URL。

void qsAddPluginDirectory(qsWebView webView, const WCHAR* path)


添加插件目录。

void qsSetUserAgent(qsWebView webView, const utf8* userAgent)


设置webview的UA,每个webView是隔离的,互不影响。

void qsSetZoomFactor(qsWebView webView, float factor)


设置页面缩放系数,默认是1。

float qsGetZoomFactor(qsWebView webView)


获取页面缩放系数。

void qsEnableHighDPISupport()


【可跨线程】开启高分屏支持。

注意:这个接口内部是通过设置ZOOM,并且关闭系统默认放大来实现。所以再使用qsGetZoomFactor接口会发现值可能不为1。

void qsSetDiskCacheEnabled(qsWebView webView, BOOL enable)


【可跨线程】是否开启本地磁盘缓存,默认开启。

void qsSetDiskCachePath(qsWebView webView, const WCHAR* path)


【可跨线程】设置磁盘缓存目录。

void qsSetDiskCacheLimit(qsWebView webView, size_t limit)


【可跨线程】设置磁盘缓存大小限制。

void qsSetDiskCacheLimitDisk(qsWebView webView, size_t limit)


【可跨线程】设置磁盘缓存在单一硬盘上大小限制。

void qsSetDiskCacheLevel(qsWebView webView, int Level)


【可跨线程】设置磁盘缓存等级。

void qsSetResourceGc(qsWebView webView, int intervalSec)


设置资源回收时间间隔,默认300秒。

void qsCanGoForward(qsWebView webView, qsCanGoBackForwardCallback callback, void* param)


页面是否可以前进。

void qsCanGoBack(qsWebView webView, qsCanGoBackForwardCallback callback, void* param)


页面是否可以后退。

void qsGetCookie(qsWebView webView, qsGetCookieCallback callback, void* param)


获取指定页面的cookie,结果需要在qsGetCookieCallback中获取,qsGetCookieCallback定义为:

enum qsAsynRequestState {
    kQsAsynRequestStateOk = 0,
    kQsAsynRequestStateFail = 1,
};
typedef void(QS_CALL_TYPE* qsGetCookieCallback)(qsWebView webView, void* param, qsAsynRequestState state, const utf8* cookie);

const utf8* qsGetCookieOnBlinkThread(qsWebView webView)


获取Blink线程上的cookie。

void qsClearCookie(qsWebView webView)


【可跨线程】清除指定webView的cookie。

void qsResize(qsWebView webView, int w, int h)


重新设置页面的宽高。如果webView是带窗口模式的,会设置实际窗口的宽高。

void qsOnNavigation(qsWebView webView, qsNavigationCallback callback, void* param)


导航到新页面时会触发此回调,param可以为自定义参数,QS会直接传给回给回调参数(下同),qsNavigationCallback定义为:

typedef enum {
    QS_NAVIGATION_TYPE_LINKCLICK,
    QS_NAVIGATION_TYPE_FORMSUBMITTE,
    QS_NAVIGATION_TYPE_BACKFORWARD,
    QS_NAVIGATION_TYPE_RELOAD,
    QS_NAVIGATION_TYPE_FORMRESUBMITT,
    QS_NAVIGATION_TYPE_OTHER
} qsNavigationType;
typedef BOOL(QS_CALL_TYPE *qsNavigationCallback)(qsWebView webView, void* param, qsNavigationType navigationType, const utf8* url);

void qsOnNavigationSync(qsWebView webView, qsNavigationCallback callback, void* param)


导航到新页面时会触发此回调。

void qsOnCreateView(qsWebView webView, qsCreateViewCallback callback, void* param)


创建新窗口时将触发回调(window.open等),qsCreateViewCallback定义为:

typedef enum {
    QS_NAVIGATION_TYPE_LINKCLICK,
    QS_NAVIGATION_TYPE_FORMSUBMITTE,
    QS_NAVIGATION_TYPE_BACKFORWARD,
    QS_NAVIGATION_TYPE_RELOAD,
    QS_NAVIGATION_TYPE_FORMRESUBMITT,
    QS_NAVIGATION_TYPE_OTHER
} qsNavigationType;
typedef struct {
    int x;
    int y;
    int width;
    int height;
    BOOL menuBarVisible;
    BOOL statusBarVisible;
    BOOL toolBarVisible;
    BOOL locationBarVisible;
    BOOL scrollbarsVisible;
    BOOL resizable;
    BOOL fullscreen;
} qsWindowFeatures;
typedef qsWebView(QS_CALL_TYPE *qsCreateViewCallback)(qsWebView webView, void* param, qsNavigationType navigationType, const utf8* url, const qsWindowFeatures* windowFeatures);

注意:window.open等代码需要指定完整的网页URL(带http),如:https://www.miniblink.net,否则QS会认为这是文件路径而自动拼接了当前目录。

void qsOnDocumentReady(qsWebView webView, qsDocumentReadyCallback callback, void* param)


页面DOM发出ready事件时触发此回调,qsDocumentReadyCallback定义为:

typedef void* qsWebFrameHandle;
typedef void(QS_CALL_TYPE *qsDocumentReadyCallback)(qsWebView webView, void* param, qsWebFrameHandle frameId);

注意:由于现在网页多采用异步加载模式,Document数据结构生成完成 ≠ 网页加载完成,每个异步执行的加载动作完成时都可能会触发一次本回调,注意是可能,不是一定,另外页面中如有多个frame,每个frame加载完成时都会触发一次本回调,实践中可以采用qsOnLoadingFinish接口,qsOnTitleChanged接口,qsOnURLChanged接口,以及检查页面中某个元素(如网站logo等)是否存在等方法来综合判断页面加载是否完成。

void qsOnPaintUpdated(qsWebView webView, qsPaintUpdatedCallback callback, void* callbackParam)


页面有任何需要刷新的地方将触发此回调,qsPaintUpdatedCallback定义为:

typedef void(QS_CALL_TYPE *qsPaintUpdatedCallback)(qsWebView webView, void* param, const HDC hdc, int x, int y, int cx, int cy);

void qsOnPaintBitUpdated(qsWebView webView, qsPaintBitUpdatedCallback callback, void* callbackParam)


功能同qsOnPaintUpdated,不同的是回调过来的是填充好像素的buffer,而不是DC。方便嵌入到游戏中做离屏渲染,qsPaintBitUpdatedCallback定义为:

typedef struct _qsRect {
    int x;
    int y;
    int w;
    int h;
} qsRect;
typedef void(QS_CALL_TYPE *qsPaintBitUpdatedCallback)(qsWebView webView, void* param, const void* buffer, const qsRect* r, int width, int height);

void qsOnLoadUrlBegin(qsWebView webView, qsLoadUrlBeginCallback callback, void* callbackParam)


任何网络请求发起前会触发此回调,如果qsLoadUrlBeginCallback返回true,则表示取消本次请求,qsLoadUrlBeginCallback定义为:

typedef BOOL(QS_CALL_TYPE *qsLoadUrlBeginCallback)(qsWebView webView, void* param, const char* url, void* job);

注意:此接口是在另外的线程执行,请自行同步数据。

void qsOnLoadUrlEnd(qsWebView webView, qsLoadUrlEndCallback callback, void* callbackParam)


网络请求结束时会触发此回调,只有设置了qsNetSetData或qsNetHookRequest才会触发该接口,qsLoadUrlEndCallback定义为:

typedef void(QS_CALL_TYPE *qsLoadUrlEndCallback)(qsWebView webView, void* param, const char* url, void* job, void* buf, int len);

void qsOnLoadUrlFail(qsWebView webView, qsLoadUrlFailCallback callback, void* callbackParam)


页面加载失败时触发此回调,qsLoadUrlFailCallback定义为:

typedef void(QS_CALL_TYPE *qsLoadUrlFailCallback)(qsWebView webView, void* param, const char* url, void* job);

void qsOnTitleChanged(qsWebView webView, qsTitleChangedCallback callback, void* callbackParam)


页面标题变化时触发此回调,qsTitleChangedCallback定义为:

typedef void(QS_CALL_TYPE *qsTitleChangedCallback)(qsWebView webView, void* param, const utf8* title);

void qsOnURLChanged(qsWebView webView, qsURLChangedCallback callback, void* callbackParam)


页面URL改变时触发此回调,qsURLChangedCallback定义为:

typedef void(QS_CALL_TYPE *qsURLChangedCallback)(qsWebView webView, void* param, const utf8* url, BOOL canGoBack, BOOL canGoForward);

void qsOnLoadingFinish(qsWebView webView, qsLoadingFinishCallback callback, void* param)


页面加载完成时触发此回调,qsLoadingFinishCallback定义为:

typedef void* qsWebFrameHandle;
typedef enum {
    QS_LOADING_SUCCEEDED,
    QS_LOADING_FAILED,
    QS_LOADING_CANCELED
} qsLoadingResult;
typedef void(QS_CALL_TYPE *qsLoadingFinishCallback)(qsWebView webView, void* param, qsWebFrameHandle frameId, const utf8* url, qsLoadingResult result, const utf8* failedReason);

注意:由于异步或多frame等原因,此接口不能保证网页一定加载完成,实践中可以采用qsOnDocumentReady接口,qsOnTitleChanged接口,qsOnURLChanged接口,以及检查页面中某个元素(如网站logo等)是否存在等方法来综合判断页面加载是否完成。

void qsOnDownload(qsWebView webView, qsDownloadCallback callback, void* param)


下载时触发此回调,qsDownloadCallback定义为:

typedef void* qsWebFrameHandle;
typedef BOOL(QS_CALL_TYPE *qsDownloadCallback)(qsWebView webView, void* param, qsWebFrameHandle frameId, const char* url, void* downloadJob);

注意:回调中暂时只返回了下载URL,未带有身份认证信息,所以只适用于不需要身份认证的下载请求。

void qsOnDownloadInBlinkThread(qsWebView webView, qsDownloadInBlinkThreadCallback callback, void* param)


下载时触发此回调,但回调是在另外的线程中。可在回调中调用qsPopupDialogAndDownload接口,这样能弹出文件另存框,并自动开始下载,qsDownloadInBlinkThreadCallback定义为:

typedef void* qsNetJob;
typedef void(QS_CALL_TYPE*qsNetJobDataRecvCallback)(void* ptr, qsNetJob job, const char* data, int length);
typedef void(QS_CALL_TYPE*qsNetJobDataFinishCallback)(void* ptr, qsNetJob job, qsLoadingResult result);
typedef struct _qsNetJobDataBind {
    void* param;
    qsNetJobDataRecvCallback recvCallback;
    qsNetJobDataFinishCallback finishCallback;
} qsNetJobDataBind;
typedef qsDownloadOpt(QS_CALL_TYPE*qsDownloadInBlinkThreadCallback)(
    qsWebView webView, 
    void* param, 
    size_t expectedContentLength,
    const char* url, 
    const char* mime, 
    const char* disposition, 
    qsNetJob job, 
    qsNetJobDataBind* dataBind
    );

void qsOnAlertBox(qsWebView webView, qsAlertBoxCallback callback, void* param)


网页调用alert时会触发此回调,qsAlertBoxCallback定义为:

typedef void(QS_CALL_TYPE *qsAlertBoxCallback)(qsWebView webView, void* param, const utf8* msg);

void qsOnConfirqSox(qsWebView webView, qsConfirqSoxCallback callback, void* param)


网页调用Confirm时会触发此回调,qsConfirqSoxCallback定义为:

typedef BOOL(QS_CALL_TYPE *qsConfirqSoxCallback)(qsWebView webView, void* param, const utf8* msg);

void qsOnPromptBox(qsWebView webView, qsPromptBoxCallback callback, void* param)


网页调用Prompt时会触发此回调,qsPromptBoxCallback定义为:

struct qsString;
typedef qsString* qsStringPtr;
typedef qsStringPtr(QS_CALL_TYPE *qsPromptBoxCallback)(qsWebView webView, void* param, const utf8* msg, const utf8* defaultResult);

void qsOnNetGetFavicon(qsWebView webView, qsNetGetFaviconCallback callback, void* param)


获取网页的Favicon,结果在qsNetGetFaviconCallback中获取,qsNetGetFaviconCallback定义为:

typedef struct _qsMeqSuf {
    int size;
    void* data;
    size_t length;
} qsMeqSuf;
typedef void(QS_CALL_TYPE *qsNetGetFaviconCallback)(qsWebView webView, void* param, const utf8* url, qsMeqSuf* buf);

void qsOnConsole(qsWebView webView, qsConsoleCallback callback, void* param)


有Console输出时会触发此回调,qsConsoleCallback定义为:

typedef enum {
    qsLevelDebug = 4,
    qsLevelLog = 1,
    qsLevelInfo = 5,
    qsLevelWarning = 2,
    qsLevelError = 3,
    qsLevelRevokedError = 6,
    qsLevelLast = qsLevelInfo
} qsConsoleLevel;
typedef void(QS_CALL_TYPE *qsConsoleCallback)(
    qsWebView webView, 
    void* param, 
    qsConsoleLevel level, 
    const utf8* message, 
    const utf8* sourceName, 
    unsigned sourceLine, 
    const utf8* stackTrace
);

BOOL qsOnClose(qsWebView webView, qsCloseCallback callback, void* param)


网页关闭时会触发此回调,如qsCloseCallback返回为false,则表示取消关闭操作,qsCloseCallback定义为:

typedef BOOL(QS_CALL_TYPE *qsCloseCallback)(qsWebView webView, void* param, void* unuse);

BOOL qsOnDestroy(qsWebView webView, qsDestroyCallback callback, void* param)


【可跨线程】窗口被销毁时触发此回调,qsDestroyCallback定义为:

typedef BOOL(QS_CALL_TYPE *qsDestroyCallback)(qsWebView webView, void* param, void* unuse);

注意:不同于qsOnClose,这个操作无法取消。

BOOL qsOnPrinting(qsWebView webView, qsPrintingCallback callback, void* param)


【可跨线程】打印时触发此回调,qsPrintingCallback定义为:

typedef enum _qsPrintintStep {
    kPrintintStepStart,
    kPrintintStepPreview,
    kPrintintStepPrinting,
} qsPrintintStep;
typedef struct _qsPrintintSettings {
    int dpi;
    int width;
    int height;
    float scale;
} qsPrintintSettings;
typedef BOOL(QS_CALL_TYPE *qsPrintingCallback)(
    qsWebView webview, 
    void* param, 
    qsPrintintStep step, 
    HDC hDC, 
    const qsPrintintSettings* settings, 
    int pageCount
);

void qsOnDidCreateScriptContext(qsWebView webView, qsDidCreateScriptContextCallback callback, void* callbackParam)


执行js代码前,将触发此回调,qsDidCreateScriptContextCallback定义为:

typedef void* qsWebFrameHandle;
typedef void(QS_CALL_TYPE *qsDidCreateScriptContextCallback)(
    qsWebView webView, 
    void* param, 
    qsWebFrameHandle frameId, 
    void* context, 
    int extensionGroup, 
    int worldId
);

void qsOnPluginList(qsWebView webView, qsGetPluginListCallback callback, void* callbackParam)


【可跨线程】有插件加入插件列表时触发此回调,qsGetPluginListCallback定义为:

typedef BOOL(QS_CALL_TYPE *qsGetPluginListCallback)(BOOL refresh, void* pluginListBuilder, void* param);

void qsOnImageBufferToDataURL(qsWebView webView, qsImageBufferToDataURLCallback callback, void* callbackParam)


有Image数据写入缓存时触发,可用于修改画布指纹,qsImageBufferToDataURLCallback定义为:

struct qsString;
typedef qsString* qsStringPtr;
typedef qsStringPtr(QS_CALL_TYPE *qsImageBufferToDataURLCallback)(qsWebView webView, void* param, const char* data, size_t size);

void qsGoBack(qsWebView webView)


【可跨线程】强制让页面后退。

void qsGoForward(qsWebView webView)


【可跨线程】强制让页面前进。

void qsStopLoading(qsWebView webView)


【可跨线程】强制停止加载页面。

void qsReload(qsWebView webView)


【可跨线程】重新加载页面(刷新)。

注意:此接口是强制刷新,即需要从服务器重新拉取数据,相当于Ctrl+F5操作。

void qsPerformCookieCommand(qsWebView webView, qsCookieCommand command)


设置qs内置的curl来操作cookie,qsCookieCommand定义为:

typedef enum {
    qsCookieCommandClearAllCookies,
    qsCookieCommandClearSessionCookies,
    qsCookieCommandFlushCookiesToFile,
    qsCookieCommandReloadCookiesFromFile,
} qsCookieCommand;

注意:这个接口只是调用curl设置命令,并不会去修改js里的内容。

void qsEditorSelectAll(qsWebView webView)


给webview发送全选命令。

void qsEditorCopy(qsWebView webView)


给webview发送拷贝命令。

void qsEditorCut(qsWebView webView)


给webview发送剪切命令。

void qsEditorPaste(qsWebView webView)


给webview发送粘贴命令。

void qsEditorDelete(qsWebView webView)


给webview发送删除命令。

void qsEditorUndo(qsWebView webView)


给webview发送撤销命令。

BOOL qsFireMouseEvent(qsWebView webView, unsigned int message, int x, int y, unsigned int flags)


触发一个鼠标事件,message及flags的可取值为:

typedef enum {
    QS_MSG_MOUSEMOVE = 0x0200,
    QS_MSG_LBUTTONDOWN = 0x0201,
    QS_MSG_LBUTTONUP = 0x0202,
    QS_MSG_LBUTTONDBLCLK = 0x0203,
    QS_MSG_RBUTTONDOWN = 0x0204,
    QS_MSG_RBUTTONUP = 0x0205,
    QS_MSG_RBUTTONDBLCLK = 0x0206,
    QS_MSG_QSUTTONDOWN = 0x0207,
    QS_MSG_QSUTTONUP = 0x0208,
    QS_MSG_QSUTTONDBLCLK = 0x0209,
    QS_MSG_MOUSEWHEEL = 0x020A,
} qsMouseMsg;
typedef enum {
    QS_LBUTTON = 0x01,
    QS_RBUTTON = 0x02,
    QS_SHIFT = 0x04,
    QS_CONTROL = 0x08,
    QS_QSUTTON = 0x10,
} qsMouseFlags;

注意:x和y为相对窗口左上角的像素坐标。

BOOL qsFireContextMenuEvent(qsWebView webView, int x, int y, unsigned int flags)


向qs发送菜单消息。

BOOL qsFireMouseWheelEvent(qsWebView webView, int x, int y, int delta, unsigned int flags)


向qs发送滚轮消息。

BOOL qsFireKeyUpEvent(qsWebView webView, unsigned int virtualKeyCode, unsigned int flags, BOOL systemKey)


向qs发送WM_KEYUP消息。

BOOL qsFireKeyDownEvent(qsWebView webView, unsigned int virtualKeyCode, unsigned int flags, BOOL systemKey)


向qs发送WM_KEYDOWN消息。

BOOL qsFireKeyPressEvent(qsWebView webView, unsigned int charCode, unsigned int flags, BOOL systemKey)


向qs发送鼠标点击消息。

BOOL qsFireWindowsMessage(qsWebView webView, HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, LRESULT* result)


向qs发送任意windows消息。

注意:QS在无窗口模式下,要响应光标事件,需要通过本函数手动发送光标消息。

void qsSetFocus(qsWebView webView)


设置webview是焦点态。如果webveiw关联了窗口,窗口也会有焦点。

void qsKillFocus(qsWebView webView)


设置webview放弃焦点态。

void qsShowWindow(qsWebView webview, BOOL show)


【可跨线程】设置是否显示窗口。

void qsLoadURL(qsWebView webView, const utf8* url)


【可跨线程】加载URL。

注意:url必须是网络路径,如https://qq.com/。

void qsLoadHtmlWithBaseUrl(qsWebView webView, const utf8* html, const utf8* baseUrl)


加载一段HTML代码,如果代码里有相对路径的文件操作,baseUrl可以指定代码中的相对目录,””则为当前目录。

void qsPostURL(qsWebView webView, const utf8* url, const char* postData, int postLen)


向指定URL发送一组数据。

HDC qsGetLockedViewDC(qsWebView webView)


获取页面DC锁。

void qsUnlockViewDC(qsWebView webView)


解锁页面DC。

void qsWake(qsWebView webView)


【可跨线程】唤醒指定的webView。

double qsJsToDouble(qsJsExecState es, qsJsValue v)


【可跨线程】将js值转成C代码中的double类型。

BOOL qsJsToBoolean(qsJsExecState es, qsJsValue v)


【可跨线程】将js值转成C代码中的BOOL类型。

const utf8* qsJsToString(qsJsExecState es, qsJsValue v)


【可跨线程】将js值转成C代码中的字符串类型。

qsJsType qsGetJsValueType(qsJsExecState es, qsJsValue v)


【可跨线程】获取js值的类型,qsJsType定义为:

typedef enum {
    kQsJsTypeNuqser = 0,
    kQsJsTypeString = 1,
    kQsJsTypeBool = 2,
    //kQsJsTypeObject = 3,
    //kQsJsTypeFunction = 4,
    kQsJsTypeUndefined  = 5,
    //kQsJsTypeArray = 6,
    kQsJsTypeNull = 7,
} qsJsType;

void qsOnJsQuery(qsWebView webView, qsJsQueryCallback callback, void* param)


注册js通知native的回调。配合qsResponseQuery接口,用于实现js调用C++,具体用法参看官网https://miniblink.net/views/doc/other.html。
qsJsQueryCallback定义为:

typedef void* qsJsExecState;
typedef void(QS_CALL_TYPE* qsJsQueryCallback)(
    qsWebView webView, 
    void* param, 
    qsJsExecState es, 
    int64_t queryId, 
    int customMsg, 
    const utf8* request
);

void qsResponseQuery(qsWebView webView, int64_t queryId, int customMsg, const utf8* response)


C++代码执行结果需要返回给js时,可使用此接口。

void qsRunJs(qsWebView webView, qsWebFrameHandle frameId, const utf8* script, BOOL isInClosure, qsRunJsCallback callback, void* param, void* unuse)


【可跨线程】在C++中执行一段js代码或页面中的js函数,js执行结果在qsRunJsCallback中获取,frameId可通过qsWebFrameGetMainFrame接口获取,qsRunJsCallback定义为:

typedef void* qsJsExecState;
typedef int64_t qsJsValue;
typedef void(QS_CALL_TYPE *qsRunJsCallback)(qsWebView webView, void* param, qsJsExecState es, qsJsValue v);

注意:
1、isInClosure为指定是否闭包执行,即QS会将js代码放入一个function(){ script }中执行,所以script代码中如果含有大括号字符,请转义,否则会运行出错。
2、如js有返回值,则script参数前需要加上“return”。

qsJsValue qsRunJsSync(qsWebView webView, qsWebFrameHandle frameId, const utf8* script, BOOL isInClosure)


在指定的frame中执行js,不同于qsRunJs,此接口结果会直接返回。

qsWebFrameHandle qsWebFrameGetMainFrame(qsWebView webView)


【可跨线程】获取主frame的句柄。

BOOL qsIsMainFrame(qsWebView webView, qsWebFrameHandle frameId)


判断是否是主frame。

void qsSetNodeJsEnable(qsWebView webView, BOOL b)


是否开启NodeJs,默认不开启。

void qsSetDeviceParameter(qsWebView webView, const char* device, const char* paramStr, int paramInt, float paramFloat)


设置webView模拟硬件设备环境,device:可取值如下:
navigator.maxTouchPoints时,paramInt需设置,表示touch的点数。
navigator.platform时,paramStr需设置,表示js里获取的navigator.platform字符串。
navigator.hardwareConcurrency时,paramInt需设置,表示js里获取的navigator.hardwareConcurrency整数值。
screen.width时,paramInt需设置,表示js里获取的screen.width整数值。
screen.height时,paramInt需设置,表示js里获取的screen.height整数值。
screen.availWidth时,paramInt需设置,表示js里获取的screen.availWidth整数值。
screen.availHeight时,paramInt需设置,表示js里获取的screen.availHeight整数值。
screen.pixelDepth时,paramInt需设置,表示js里获取的screen.pixelDepth整数值。

注意:由于现在网页大多通过多种特征判断客户端类型,所以这个接口只能做个调试,实际应用中进行模拟基本没啥用。

void qsGetContentAsMarkup(qsWebView webView, qsGetContentAsMarkupCallback calback, void* param, qsWebFrameHandle frameId)


获取标记内容,结果在qsGetContentAsMarkupCallback中获取,qsGetContentAsMarkupCallback定义为:

typedef void(QS_CALL_TYPE* qsGetContentAsMarkupCallback)(qsWebView webView, void* param, const utf8* content, size_t size);

void qsGetSource(qsWebView webView, qsGetSourceCallback calback, void* param)


获取网页H5源码,结果在qsGetSourceCallback中获取,qsGetSourceCallback定义为:

typedef void(QS_CALL_TYPE* qsGetSourceCallback)(qsWebView webView, void* param, const utf8* mhtml);

void qsUtilSerializeToMHTML(qsWebView webView, qsGetSourceCallback calback, void* param)


将网页导出为MHTML,结果在qsGetSourceCallback中获取,qsGetSourceCallback定义为:

typedef void(QS_CALL_TYPE* qsGetSourceCallback)(qsWebView webView, void* param, const utf8* mhtml);

BOOL qsUtilPrint(qsWebView webView, qsWebFrameHandle frameId, const qsPrintSettings* printParams)


【可跨线程】执行打印,qsPrintSettings定义为:

typedef struct _qsPrintSettings {
    int structSize;
    int dpi;
    int width;
    int height;
    int marginTop;
    int marginBottom;
    int marginLeft;
    int marginRight;
    BOOL isPrintPageHeadAndFooter;
    BOOL isPrintBackgroud;
    BOOL isLandscape;
    BOOL isPrintToMultiPage;
} qsPrintSettings;

const utf8* qsUtilBase64Encode(const utf8* str)


【可跨线程】Base64编码。

const utf8* qsUtilBase64Decode(const utf8* str)


【可跨线程】Base64解码。

const utf8* qsUtilEncodeURLEscape(const utf8* url)


【可跨线程】Escape编码。

const utf8* qsUtilDecodeURLEscape(const utf8* url)


【可跨线程】Escape解码。

const qsMeqSuf* qsUtilCreateV8Snapshot(const utf8* str)


【可跨线程】创建V8引擎内存快照,一般用于程序调试。

void qsUtilPrintToPdf(qsWebView webView, qsWebFrameHandle frameId, const qsPrintSettings* settings, qsPrintPdfDataCallback callback, void* param)


【可跨线程】将页面输出成pdf,qsPrintPdfDataCallback定义为:

typedef struct _qsPrintSettings {
    int structSize;
    int dpi;
    int width;
    int height;
    int marginTop;
    int marginBottom;
    int marginLeft;
    int marginRight;
    BOOL isPrintPageHeadAndFooter;
    BOOL isPrintBackgroud;
    BOOL isLandscape;
    BOOL isPrintToMultiPage;
} qsPrintSettings;
typedef struct _qsPdfDatas {
    int count;
    size_t* sizes;
    const void** datas;
} qsPdfDatas;
typedef void(QS_CALL_TYPE* qsPrintPdfDataCallback)(qsWebView webview, void* param, const qsPdfDatas* datas);

注意:打印PDF以插件形式实现,plugin目录下需放置相关插件文件。

void qsUtilPrintToBitmap(qsWebView webView, qsWebFrameHandle frameId, const qsScreenshotSettings* settings, qsPrintBitmapCallback callback, void* param)


【可跨线程】把页面输出成图片,结果在qsPrintBitmapCallback中获取,qsPrintBitmapCallback定义为:

typedef struct _qsScreenshotSettings {
    int structSize;
    int width;
    int height;
} qsScreenshotSettings;
typedef void(QS_CALL_TYPE* qsPrintBitmapCallback)(qsWebView webview, void* param, const char* data, size_t size);

void qsUtilScreenshot(qsWebView webView, const qsScreenshotSettings* settings, qsOnScreenshot callback, void* param)


【可跨线程】截屏,结果在qsOnScreenshot中获取,qsOnScreenshot定义为:

typedef struct _qsScreenshotSettings {
    int structSize;
    int width;
    int height;
} qsScreenshotSettings;
typedef void(QS_CALL_TYPE* qsOnScreenshot)(qsWebView webView, void* param, const char* data, size_t size);

BOOL qsPopupDownloadMgr(qsWebView webView, const char* url, void* downloadWrap)


下载。

qsDownloadOpt qsPopupDialogAndDownload(qsWebView webView, void* param, size_t contentLength, const char* url, const char* mime, const char* disposition, qsNetJob job, qsNetJobDataBind* dataBind, qsDownloadBind* callbackBind)


【可跨线程】下载,一般在qsOnDownloadInBlinkThread的回调中调用,参数定义为:

typedef enum _qsDownloadOpt {
    kQsDownloadOptCancel,
    kQsDownloadOptCacheData,
} qsDownloadOpt;
typedef void* qsNetJob;
typedef void(QS_CALL_TYPE*qsNetJobDataRecvCallback)(void* ptr, qsNetJob job, const char* data, int length);
typedef void(QS_CALL_TYPE*qsNetJobDataFinishCallback)(void* ptr, qsNetJob job, qsLoadingResult result);
typedef void(QS_CALL_TYPE*qsPopupDialogSaveNameCallback)(void* ptr, const wchar_t* filePath);
typedef struct _qsNetJobDataBind {
    void* param;
    qsNetJobDataRecvCallback recvCallback;
    qsNetJobDataFinishCallback finishCallback;
} qsNetJobDataBind;
typedef struct _qsDownloadBind {
    void* param;
    qsNetJobDataRecvCallback recvCallback;
    qsNetJobDataFinishCallback finishCallback;
    qsPopupDialogSaveNameCallback saveNameCallback;
} qsDownloadBind;

qsDownloadOpt qsDownloadByPath(qsWebView webView, void* param, const WCHAR* path, size_t contentLength, const char* url, const char* mime, const char* disposition, qsNetJob job, qsNetJobDataBind* dataBind, qsDownloadBind* callbackBind)


【可跨线程】下载,一般在qsOnDownloadInBlinkThread的回调中调用,参数定义同qsPopupDialogAndDownload。

void qsGetPdfPageData(qsWebView webView, qsOnGetPdfPageDataCallback callback, void* param)


【可跨线程】获取PDF数据,结果在qsOnGetPdfPageDataCallback中获取,qsOnGetPdfPageDataCallback定义为:

typedef void(QS_CALL_TYPE *qsOnGetPdfPageDataCallback)(qsWebView webView, void* param, void* data, size_t size);

void qsPluginListBuilderAddPlugin(void* builder, const utf8* name, const utf8* description, const utf8* fileName)


【可跨线程】添加插件。

void qsPluginListBuilderAddMediaTypeToLastPlugin(void* builder, const utf8* name, const utf8* description)


【可跨线程】添加多媒体类型插件到插件列表尾部。

void qsPluginListBuilderAddFileExtensionToLastMediaType(void* builder, const utf8* fileExtension)


【可跨线程】在多媒体插件添加文件扩展信息。