📄 kjs_window.cpp
字号:
UString Window::toString(ExecState *) const{ return "[object Window]";}Value Window::get(ExecState *exec, const Identifier &p) const{#ifdef KJS_VERBOSE kdDebug(6070) << "Window("<<this<<")::get " << p.qstring() << endl;#endif if ( p == "closed" ) return Boolean(m_part.isNull()); // we don't want any operations on a closed window if (m_part.isNull()) return Undefined(); // Look for overrides first ValueImp * val = ObjectImp::getDirect(p); if (val) { //kdDebug(6070) << "Window::get found dynamic property '" << p.ascii() << "'" << endl; if (isSafeScript(exec)) return Value(val); } const HashEntry* entry = Lookup::findEntry(&WindowTable, p); if (entry) { //kdDebug(6070) << "token: " << entry->value << endl; switch( entry->value ) { case Crypto: return Undefined(); // ### case DefaultStatus: return String(UString(m_part->jsDefaultStatusBarText())); case Status: return String(UString(m_part->jsStatusBarText())); case Document: if (isSafeScript(exec)) { if (m_part->document().isNull()) {#if APPLE_CHANGES KWQ(m_part)->createEmptyDocument();#endif kdDebug(6070) << "Document.write: adding <HTML><BODY> to create document" << endl; m_part->begin(); m_part->write("<HTML><BODY>"); m_part->end(); } Value val = getDOMNode(exec,m_part->document()); return val; } else return Undefined(); case Node: return getNodeConstructor(exec); case Range: return getRangeConstructor(exec); case NodeFilter: return getNodeFilterConstructor(exec); case DOMException: return getDOMExceptionConstructor(exec); case CSSRule: return getCSSRuleConstructor(exec); case EventCtor: return getEventConstructor(exec); case Frames: return Value(frames ? frames : (const_cast<Window*>(this)->frames = new FrameArray(exec,m_part))); case _History: return Value(history ? history : (const_cast<Window*>(this)->history = new History(exec,m_part))); case Event: if (m_evt) return getDOMEvent(exec,*m_evt); else {#ifdef KJS_VERBOSE kdWarning(6070) << "window(" << this << "," << m_part->name() << ").event, no event!" << endl;#endif return Undefined(); } case InnerHeight: if (!m_part->view()) return Undefined(); updateLayout(); return Number(m_part->view()->visibleHeight()); case InnerWidth: if (!m_part->view()) return Undefined(); updateLayout(); return Number(m_part->view()->visibleWidth()); case Length: return Number(m_part->frames().count()); case _Location: return Value(location()); case Name: return String(m_part->name()); case _Navigator: case ClientInformation: { // Store the navigator in the object so we get the same one each time. Navigator *n = new Navigator(exec, m_part); const_cast<Window *>(this)->putDirect("navigator", n, DontDelete|ReadOnly); const_cast<Window *>(this)->putDirect("clientInformation", n, DontDelete|ReadOnly); return Value(n); }#ifdef Q_WS_QWS case _Konqueror: return Value(new Konqueror(m_part));#endif case OffscreenBuffering: return Boolean(true); case Opener: if (!m_part->opener()) return Null(); // ### a null Window might be better, but == null else // doesn't work yet return retrieve(m_part->opener()); case OuterHeight: case OuterWidth: { if (!m_part->view()) return Number(0); KWin::Info inf = KWin::info(m_part->view()->topLevelWidget()->winId()); return Number(entry->value == OuterHeight ? inf.geometry.height() : inf.geometry.width()); } case PageXOffset: if (!m_part->view()) return Undefined(); updateLayout(); return Number(m_part->view()->contentsX()); case PageYOffset: if (!m_part->view()) return Undefined(); updateLayout(); return Number(m_part->view()->contentsY()); case Parent: return Value(retrieve(m_part->parentPart() ? m_part->parentPart() : (KHTMLPart*)m_part)); case Personalbar: return Undefined(); // ### case ScreenLeft: case ScreenX: { if (!m_part->view()) return Undefined(); QRect sg = QApplication::desktop()->screenGeometry(QApplication::desktop()->screenNumber(m_part->view())); return Number(m_part->view()->mapToGlobal(QPoint(0,0)).x() + sg.x()); } case ScreenTop: case ScreenY: { if (!m_part->view()) return Undefined(); QRect sg = QApplication::desktop()->screenGeometry(QApplication::desktop()->screenNumber(m_part->view())); return Number(m_part->view()->mapToGlobal(QPoint(0,0)).y() + sg.y()); } case ScrollX: { if (!m_part->view()) return Undefined(); updateLayout(); return Number(m_part->view()->contentsX()); } case ScrollY: { if (!m_part->view()) return Undefined(); updateLayout(); return Number(m_part->view()->contentsY()); } case Scrollbars: return Undefined(); // ### case Self: case _Window: return Value(retrieve(m_part)); case Top: { KHTMLPart *p = m_part; while (p->parentPart()) p = p->parentPart(); return Value(retrieve(p)); } case _Screen: return Value(screen ? screen : (const_cast<Window*>(this)->screen = new Screen(exec))); case Image: return Value(new ImageConstructorImp(exec, m_part->document())); case Option: return Value(new OptionConstructorImp(exec, m_part->document())); case XMLHttpRequest: return Value(new XMLHttpRequestConstructorImp(exec, m_part->document())); case XMLSerializer: return Value(new XMLSerializerConstructorImp(exec)); case Alert: case Confirm: case Prompt: case Open:#if APPLE_CHANGES case Print:#endif case Focus: case Blur: case Close: case Scroll: // compatibility case ScrollBy: case ScrollTo: case MoveBy: case MoveTo: case ResizeBy: case ResizeTo: return lookupOrCreateFunction<WindowFunc>(exec,p,this,entry->value,entry->params,entry->attr); case CaptureEvents: case ReleaseEvents: case AddEventListener: case RemoveEventListener: case SetTimeout: case ClearTimeout: case SetInterval: case ClearInterval: case GetSelection: if (isSafeScript(exec)) return lookupOrCreateFunction<WindowFunc>(exec,p,this,entry->value,entry->params,entry->attr); else return Undefined(); case Onabort: if (isSafeScript(exec)) return getListener(exec,DOM::EventImpl::ABORT_EVENT); else return Undefined(); case Onblur: if (isSafeScript(exec)) return getListener(exec,DOM::EventImpl::BLUR_EVENT); else return Undefined(); case Onchange: if (isSafeScript(exec)) return getListener(exec,DOM::EventImpl::CHANGE_EVENT); else return Undefined(); case Onclick: if (isSafeScript(exec)) return getListener(exec,DOM::EventImpl::KHTML_CLICK_EVENT); else return Undefined(); case Ondblclick: if (isSafeScript(exec)) return getListener(exec,DOM::EventImpl::KHTML_DBLCLICK_EVENT); else return Undefined(); case Ondragdrop: if (isSafeScript(exec)) return getListener(exec,DOM::EventImpl::KHTML_DRAGDROP_EVENT); else return Undefined(); case Onerror: if (isSafeScript(exec)) return getListener(exec,DOM::EventImpl::KHTML_ERROR_EVENT); else return Undefined(); case Onfocus: if (isSafeScript(exec)) return getListener(exec,DOM::EventImpl::FOCUS_EVENT); else return Undefined(); case Onkeydown: if (isSafeScript(exec)) return getListener(exec,DOM::EventImpl::KEYDOWN_EVENT); else return Undefined(); case Onkeypress: if (isSafeScript(exec)) return getListener(exec,DOM::EventImpl::KEYPRESS_EVENT); else return Undefined(); case Onkeyup: if (isSafeScript(exec)) return getListener(exec,DOM::EventImpl::KEYUP_EVENT); else return Undefined(); case Onload: if (isSafeScript(exec)) return getListener(exec,DOM::EventImpl::LOAD_EVENT); else return Undefined(); case Onmousedown: if (isSafeScript(exec)) return getListener(exec,DOM::EventImpl::MOUSEDOWN_EVENT); else return Undefined(); case Onmousemove: if (isSafeScript(exec)) return getListener(exec,DOM::EventImpl::MOUSEMOVE_EVENT); else return Undefined(); case Onmouseout: if (isSafeScript(exec)) return getListener(exec,DOM::EventImpl::MOUSEOUT_EVENT); else return Undefined(); case Onmouseover: if (isSafeScript(exec)) return getListener(exec,DOM::EventImpl::MOUSEOVER_EVENT); else return Undefined(); case Onmouseup: if (isSafeScript(exec)) return getListener(exec,DOM::EventImpl::MOUSEUP_EVENT); else return Undefined(); case Onmove: if (isSafeScript(exec)) return getListener(exec,DOM::EventImpl::KHTML_MOVE_EVENT); else return Undefined(); case Onreset: if (isSafeScript(exec)) return getListener(exec,DOM::EventImpl::RESET_EVENT); else return Undefined(); case Onresize: if (isSafeScript(exec)) return getListener(exec,DOM::EventImpl::RESIZE_EVENT); else return Undefined(); case Onscroll: if (isSafeScript(exec)) return getListener(exec,DOM::EventImpl::SCROLL_EVENT); else return Undefined();#if APPLE_CHANGES case Onsearch: if (isSafeScript(exec)) return getListener(exec,DOM::EventImpl::SEARCH_EVENT); else return Undefined();#endif case Onselect: if (isSafeScript(exec)) return getListener(exec,DOM::EventImpl::SELECT_EVENT); else return Undefined(); case Onsubmit: if (isSafeScript(exec)) return getListener(exec,DOM::EventImpl::SUBMIT_EVENT); else return Undefined(); case Onunload: if (isSafeScript(exec)) return getListener(exec,DOM::EventImpl::UNLOAD_EVENT); else return Undefined(); } } KHTMLPart *kp = m_part->findFrame( p.qstring() ); if (kp) return Value(retrieve(kp)); // allow window[1] or parent[1] etc. (#56983) bool ok; unsigned int i = p.toArrayIndex(&ok); if (ok) { QPtrList<KParts::ReadOnlyPart> frames = m_part->frames(); unsigned int len = frames.count(); if (i < len) { KParts::ReadOnlyPart* frame = frames.at(i); if (frame && frame->inherits("KHTMLPart")) { KHTMLPart *khtml = static_cast<KHTMLPart*>(frame); return Window::retrieve(khtml); } } } // allow shortcuts like 'Image1' instead of document.images.Image1 if (isSafeScript(exec) && m_part->document().isHTMLDocument()) { // might be XML DOM::HTMLCollection coll = m_part->htmlDocument().all(); DOM::HTMLElement element = coll.namedItem(p.string()); if (!element.isNull()) { return getDOMNode(exec,element); } } // This isn't necessarily a bug. Some code uses if(!window.blah) window.blah=1 // But it can also mean something isn't loaded or implemented, hence the WARNING to help grepping.#ifdef KJS_VERBOSE kdDebug(6070) << "WARNING: Window::get property not found: " << p.qstring() << endl;#endif return Undefined();}void Window::put(ExecState* exec, const Identifier &propertyName, const Value &value, int attr){ // Called by an internal KJS call (e.g. InterpreterImp's constructor) ?
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -