📄 mgjs_main.cpp
字号:
return JS_TRUE;}static JSBool WindowInternalCaptureEvents(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ MGHTMLView *view = mgJSGetView(cx); int32 b0; if(argc<1)return JS_FALSE; if (!JS_ValueToInt32(cx, argv[0], (int32 *)&b0)) return JS_FALSE; view->m_JsEventTypeToCapture |= b0; return JS_TRUE;}static JSBool WindowInternalReleaseEvents(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ MGHTMLView *view = mgJSGetView(cx); int32 b0; if(argc<1)return JS_FALSE; if (!JS_ValueToInt32(cx, argv[0], (int32 *)&b0)) return JS_FALSE; view->m_JsEventTypeToCapture &= ~b0; return JS_TRUE;}static JSBool WindowInternalRouteEvent(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ return JS_TRUE;}static JSBool WindowInternalBack(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ return JS_TRUE;}static JSBool WindowInternalForward(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ return JS_TRUE;}static JSBool WindowInternalHome(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ return JS_TRUE;}static JSBool WindowInternalStop(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ return JS_TRUE;}static JSBool WindowInternalPrint(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ //TODO: return JS_TRUE;}static JSBool WindowInternalMoveTo(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ return JS_TRUE;}static JSBool WindowInternalMoveBy(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ return JS_TRUE;}static JSBool WindowInternalResizeTo(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ return JS_TRUE;}static JSBool WindowInternalResizeBy(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ return JS_TRUE;}static JSBool WindowInternalSizeToContent(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ return JS_TRUE;}static JSBool WindowInternalGetAttention(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ return JS_TRUE;}static JSBool WindowInternalScroll(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ return JS_TRUE;}static JSBool WindowInternalClearInterval(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ return JS_TRUE;}static JSBool WindowInternalSetInterval(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ return JS_TRUE;}static JSBool WindowInternalEnableExternalCapture(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ return JS_TRUE;}static JSBool WindowInternalDisableExternalCapture(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ return JS_TRUE;}static JSBool WindowInternalSetCursor(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ return JS_TRUE;}static JSBool WindowInternalOpenDialog(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ return JS_TRUE;}static JSBool WindowInternalUpdateCommands(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ return JS_TRUE;}static JSBool WindowInternalEscape(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ return JS_TRUE;}static JSBool WindowInternalUnescape(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ return JS_TRUE;}static JSBool EventTargetAddEventListener(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ //TODO: return JS_TRUE;}static JSBool EventTargetRemoveEventListener(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ //TODO: return JS_TRUE;}static JSBool EventTargetDispatchEvent(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ //TODO: return JS_TRUE;}static JSBool ViewCSSGetComputedStyle(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ //TODO: return JS_TRUE;}static JSPropertySpec WindowProperties[] ={ {"navigator", WINDOWINTERNAL_NAVIGATOR, JSPROP_ENUMERATE | JSPROP_READONLY}, {"location", WINDOWINTERNAL_LOCATION,JSPROP_ENUMERATE}, {"document", WINDOW_DOCUMENT, JSPROP_ENUMERATE | JSPROP_READONLY}, {"history", WINDOWINTERNAL_HISTORY, JSPROP_ENUMERATE | JSPROP_READONLY}, {"innerWidth", WINDOWINTERNAL_INNERWIDTH, JSPROP_ENUMERATE}, {"innerHeight", WINDOWINTERNAL_INNERHEIGHT, JSPROP_ENUMERATE}, {"name", WINDOW_NAME, JSPROP_ENUMERATE},#if 0 {"parent", WINDOW_PARENT, JSPROP_ENUMERATE | JSPROP_READONLY}, {"scrollbars", WINDOW_SCROLLBARS, JSPROP_ENUMERATE | JSPROP_READONLY}, {"frames", WINDOW_FRAMES, JSPROP_ENUMERATE | JSPROP_READONLY}, {"scrollX", WINDOW_SCROLLX, JSPROP_ENUMERATE | JSPROP_READONLY}, {"scrollY", WINDOW_SCROLLY, JSPROP_ENUMERATE | JSPROP_READONLY}, {"window", WINDOWINTERNAL_WINDOW, JSPROP_ENUMERATE | JSPROP_READONLY}, {"self", WINDOWINTERNAL_SELF, JSPROP_ENUMERATE | JSPROP_READONLY}, {"screen", WINDOWINTERNAL_SCREEN, JSPROP_ENUMERATE | JSPROP_READONLY}, {"statusbar", WINDOWINTERNAL_STATUSBAR, JSPROP_ENUMERATE | JSPROP_READONLY}, {"directories", WINDOWINTERNAL_DIRECTORIES, JSPROP_ENUMERATE | JSPROP_READONLY}, {"closed", WINDOWINTERNAL_CLOSED, JSPROP_ENUMERATE | JSPROP_READONLY}, {"crypto", WINDOWINTERNAL_CRYPTO, JSPROP_ENUMERATE | JSPROP_READONLY}, {"pkcs11", WINDOWINTERNAL_PKCS11, JSPROP_ENUMERATE | JSPROP_READONLY}, {"opener", WINDOWINTERNAL_OPENER, JSPROP_ENUMERATE}, {"status", WINDOWINTERNAL_STATUS, JSPROP_ENUMERATE}, {"defaultStatus", WINDOWINTERNAL_DEFAULTSTATUS, JSPROP_ENUMERATE}, {"title", WINDOWINTERNAL_TITLE, JSPROP_ENUMERATE}, {"outerWidth", WINDOWINTERNAL_OUTERWIDTH, JSPROP_ENUMERATE}, {"outerHeight", WINDOWINTERNAL_OUTERHEIGHT, JSPROP_ENUMERATE}, {"screenX", WINDOWINTERNAL_SCREENX, JSPROP_ENUMERATE}, {"screenY", WINDOWINTERNAL_SCREENY, JSPROP_ENUMERATE}, {"pageXOffset", WINDOWINTERNAL_PAGEXOFFSET, JSPROP_ENUMERATE}, {"pageYOffset", WINDOWINTERNAL_PAGEYOFFSET, JSPROP_ENUMERATE}, {"length", WINDOWINTERNAL_LENGTH, JSPROP_ENUMERATE | JSPROP_READONLY}, {"onmousedown", WINDOWEVENTOWNER_ONMOUSEDOWN, JSPROP_ENUMERATE}, {"onmouseup", WINDOWEVENTOWNER_ONMOUSEUP, JSPROP_ENUMERATE}, {"onclick", WINDOWEVENTOWNER_ONCLICK, JSPROP_ENUMERATE}, {"onmouseover", WINDOWEVENTOWNER_ONMOUSEOVER, JSPROP_ENUMERATE}, {"onmouseout", WINDOWEVENTOWNER_ONMOUSEOUT, JSPROP_ENUMERATE}, {"onkeydown", WINDOWEVENTOWNER_ONKEYDOWN, JSPROP_ENUMERATE}, {"onkeyup", WINDOWEVENTOWNER_ONKEYUP, JSPROP_ENUMERATE}, {"onkeypress", WINDOWEVENTOWNER_ONKEYPRESS, JSPROP_ENUMERATE}, {"onmousemove", WINDOWEVENTOWNER_ONMOUSEMOVE, JSPROP_ENUMERATE}, {"onfocus", WINDOWEVENTOWNER_ONFOCUS, JSPROP_ENUMERATE}, {"onblur", WINDOWEVENTOWNER_ONBLUR, JSPROP_ENUMERATE}, {"onsubmit", WINDOWEVENTOWNER_ONSUBMIT, JSPROP_ENUMERATE}, {"onreset", WINDOWEVENTOWNER_ONRESET, JSPROP_ENUMERATE}, {"onchange", WINDOWEVENTOWNER_ONCHANGE, JSPROP_ENUMERATE}, {"onselect", WINDOWEVENTOWNER_ONSELECT, JSPROP_ENUMERATE}, {"onload", WINDOWEVENTOWNER_ONLOAD, JSPROP_ENUMERATE}, {"onunload", WINDOWEVENTOWNER_ONUNLOAD, JSPROP_ENUMERATE}, {"onclose", WINDOWEVENTOWNER_ONCLOSE, JSPROP_ENUMERATE}, {"onabort", WINDOWEVENTOWNER_ONABORT, JSPROP_ENUMERATE}, {"onerror", WINDOWEVENTOWNER_ONERROR, JSPROP_ENUMERATE}, {"onpaint", WINDOWEVENTOWNER_ONPAINT, JSPROP_ENUMERATE}, {"ondragdrop", WINDOWEVENTOWNER_ONDRAGDROP, JSPROP_ENUMERATE}, {"onresize", WINDOWEVENTOWNER_ONRESIZE, JSPROP_ENUMERATE}, {"onscroll", WINDOWEVENTOWNER_ONSCROLL, JSPROP_ENUMERATE},#endif {0}};static JSFunctionSpec WindowMethods[] = {#if 0 {"scrollTo", WindowScrollTo, 2}, {"scrollBy", WindowScrollBy, 2}, {"getSelection", WindowGetSelection, 0}, {"scrollByLines", WindowScrollByLines, 1}, {"scrollByPages", WindowScrollByPages, 1}, {"dump", WindowInternalDump, 1}, {"alert", WindowInternalAlert, 1}, {"confirm", WindowInternalConfirm, 1}, {"prompt", WindowInternalPrompt, 2}, {"open", WindowInternalOpen, 0}, {"close", WindowInternalClose, 0}, {"setTimeout", WindowInternalSetTimeout, 0}, {"clearTimeout", WindowInternalClearTimeout, 1}, {"focus", WindowInternalFocus, 0}, {"blur", WindowInternalBlur, 0}, {"captureEvents", WindowInternalCaptureEvents, 1}, {"releaseEvents", WindowInternalReleaseEvents, 1}, {"routeEvent", WindowInternalRouteEvent, 1}, {"back", WindowInternalBack, 0}, {"forward", WindowInternalForward, 0}, {"home", WindowInternalHome, 0}, {"stop", WindowInternalStop, 0}, {"print", WindowInternalPrint, 0}, {"moveTo", WindowInternalMoveTo, 2}, {"moveBy", WindowInternalMoveBy, 2}, {"resizeTo", WindowInternalResizeTo, 2}, {"resizeBy", WindowInternalResizeBy, 2}, {"sizeToContent", WindowInternalSizeToContent, 0}, {"GetAttention", WindowInternalGetAttention, 0}, {"scroll", WindowInternalScroll, 2}, {"clearInterval", WindowInternalClearInterval, 1}, {"setInterval", WindowInternalSetInterval, 0}, {"enableExternalCapture", WindowInternalEnableExternalCapture, 0}, {"disableExternalCapture", WindowInternalDisableExternalCapture, 0}, {"setCursor", WindowInternalSetCursor, 1}, {"openDialog", WindowInternalOpenDialog, 0}, {"updateCommands", WindowInternalUpdateCommands, 1}, {"escape", WindowInternalEscape, 1}, {"unescape", WindowInternalUnescape, 1}, {"addEventListener", EventTargetAddEventListener, 3}, {"removeEventListener", EventTargetRemoveEventListener, 3}, {"dispatchEvent", EventTargetDispatchEvent, 1}, {"getComputedStyle", ViewCSSGetComputedStyle, 2},#endif {0}};static JSClass WindowClass = { "Window", JSCLASS_HAS_PRIVATE, JS_PropertyStub,JS_PropertyStub, GetWindowProperty, SetWindowProperty, JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub };bool InitialJavaScript(MGHTMLView* view,JSRuntime** jrt,JSContext** jsc,JSObject** jso){ HWND phMainWnd=view->getHwnd(); JSRuntime *rt; JSContext *cx; JSObject *globalObj; myJSPrivateData *mypd; JSObject *documentObj,*locationObj,*historyObj,*navigatorObj; JSObject *elementObj,*eventObj,*UIEventObj,*KeyEventObj; rt = *jrt; cx = *jsc; if (!(globalObj = JS_NewObject (cx, &WindowClass, NULL, NULL))) { return FALSE; } JS_InitStandardClasses (cx, globalObj); JS_DefineProperties (cx,globalObj, WindowProperties); JS_DefineFunctions (cx,globalObj, WindowMethods); navigatorObj = InitNavigatorClass(cx,globalObj,0); documentObj = InitDocumentClass(cx,globalObj,0); locationObj = InitLocationClass(cx,globalObj,0); historyObj = InitHistoryClass(cx,globalObj,0); eventObj = InitEventClass(cx, globalObj, 0); UIEventObj = InitUIEventClass(cx, globalObj, eventObj); KeyEventObj = InitKeyEventClass(cx, globalObj, UIEventObj); elementObj=InitHTMLElementClass(cx,globalObj,0); mypd = new myJSPrivateData; mypd->view = view; mypd->hWnd = phMainWnd; mypd->dom = view->m_doc; mypd->locationObj=locationObj; mypd->navigatorObj=navigatorObj; mypd->historyObj=historyObj; mypd->documentObj=documentObj; mypd->elementObj = elementObj; mypd->eventObj = KeyEventObj; JS_SetContextPrivate (cx,(void*)mypd); *jso = globalObj; return TRUE;}bool EvaluateJavaScript(QString &qs,JSContext** jsc,JSObject** jso,HTMLElementImpl *nimpl){ JSContext *cx; JSObject *globalObj; jsval rval; JSString *jstr; JSObject *documentObj; cx = *jsc; globalObj = *jso; bool bret=1; JSObject *elementObj; JSBool jsb; if(nimpl) { documentObj=mgJSGetDocumentObj(cx); elementObj=mgJSGetElementObj(cx); jsb = HTML_NewObjectByElementCommon(cx,documentObj,elementObj,documentObj,nimpl,&rval); if(jsb==JS_TRUE) globalObj=JSVAL_TO_OBJECT(rval); else globalObj=0; } if(JS_EvaluateScript (cx,globalObj,(const char*)qs,qs.length(),0,1,&rval)==JS_TRUE){ jstr = JS_ValueToString (cx, rval); //NB: returned value determines form's submit if( JSVAL_IS_BOOLEAN(rval)) bret = JSVAL_TO_BOOLEAN(rval); else if( JSVAL_IS_INT(rval)) bret = JSVAL_TO_INT(rval);#if DEBUG_JAVASCRIPT fprintf(stderr,"mgjs_main script result: %s\n", JS_GetStringBytes (jstr));#endif } else{#if DEBUG_JAVASCRIPT fprintf(stderr,"mgjs_main script result:JS_FALSE.\n");#endif } return bret;}bool FreeJavaScript(MGHTMLView* view,JSRuntime* jrt,JSContext* jsc){ mgJsFreeAllTimer(view); mgJsFreeAllEvent(view);#if 0 if(jsc) JS_DestroyContext (jsc);#endif if(jrt) JS_DestroyRuntime (jrt); return TRUE;} MGHTMLView* mgJSGetView(JSContext *cx){ return ((myJSPrivateData*)JS_GetContextPrivate (cx))->view;}HWND mgJSGethWnd(JSContext *cx){ MGHTMLView *view = ((myJSPrivateData*)JS_GetContextPrivate (cx))->view; return view!=NULL ? view->getHwnd() : 0;}DOM::HTMLDocumentImpl* mgJSGetDoc(JSContext *cx){ MGHTMLView *view = ((myJSPrivateData*)JS_GetContextPrivate (cx))->view; return view!=NULL ? view->m_doc : NULL;}JSObject *mgJSGetEventObj(JSContext *cx){ return ((myJSPrivateData*)JS_GetContextPrivate (cx))->eventObj;}JSObject *mgJSGetLocationObj(JSContext *cx){ return ((myJSPrivateData*)JS_GetContextPrivate (cx))->locationObj;}JSObject *mgJSGetNavigatorObj(JSContext *cx){ return ((myJSPrivateData*)JS_GetContextPrivate (cx))->navigatorObj;}JSObject *mgJSGetHistoryObj(JSContext *cx){ return ((myJSPrivateData*)JS_GetContextPrivate (cx))->historyObj;}JSObject *mgJSGetDocumentObj(JSContext *cx){ return ((myJSPrivateData*)JS_GetContextPrivate (cx))->documentObj;}JSObject *mgJSGetElementObj(JSContext *cx){ return ((myJSPrivateData*)JS_GetContextPrivate (cx))->elementObj;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -