⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kjs_window.cpp

📁 konqueror3 embedded版本, KDE环境下的当家浏览器的嵌入式版本源码包.
💻 CPP
📖 第 1 页 / 共 5 页
字号:
Value Window::retrieve(KParts::ReadOnlyPart *p){  assert(p);  KHTMLPart * part = ::qt_cast<KHTMLPart *>(p);  KJSProxy *proxy = 0L;  if (!part) {    part = ::qt_cast<KHTMLPart *>(p->parent());    if (part)      proxy = part->framejScript(p);  } else    proxy = part->jScript();  if (proxy) {#ifdef KJS_VERBOSE    kdDebug(6070) << "Window::retrieve part=" << part << " '" << part->name() << "' interpreter=" << proxy->interpreter() << " window=" << proxy->interpreter()->globalObject().imp() << endl;#endif    return proxy->interpreter()->globalObject(); // the Global object is the "window"  } else {#ifdef KJS_VERBOSE    kdDebug(6070) << "Window::retrieve part=" << p << " '" << p->name() << "' no jsproxy." << endl;#endif    return Undefined(); // This can happen with JS disabled on the domain of that window  }}Location *Window::location() const{  if (!loc)    const_cast<Window*>(this)->loc = new Location(m_frame);  return loc;}ObjectImp* Window::frames( ExecState* exec ) const{  KHTMLPart *part = ::qt_cast<KHTMLPart *>(m_frame->m_part);  if (part)    return m_frames ? m_frames :      (const_cast<Window*>(this)->m_frames = new FrameArray(exec, part));  return 0L;}// reference our special objects during garbage collectionvoid Window::mark(){  ObjectImp::mark();  if (screen && !screen->marked())    screen->mark();  if (history && !history->marked())    history->mark();  if (external && !external->marked())    external->mark();  if (m_frames && !m_frames->marked())    m_frames->mark();  //kdDebug(6070) << "Window::mark " << this << " marking loc=" << loc << endl;  if (loc && !loc->marked())    loc->mark();  if (winq)    winq->mark();}bool Window::hasProperty(ExecState *exec, const Identifier &p) const{  // we don't want any operations on a closed window  if (m_frame.isNull() || m_frame->m_part.isNull())    return ( p == "closed" );  if (ObjectImp::hasProperty(exec, p))    return true;  if (Lookup::findEntry(&WindowTable, p))    return true;  KHTMLPart *part = ::qt_cast<KHTMLPart *>(m_frame->m_part);  if (!part)      return false;  QString q = p.qstring();  if (part->findFramePart(p.qstring()))    return true;  // allow window[1] or parent[1] etc. (#56983)  bool ok;  unsigned int i = p.toArrayIndex(&ok);  if (ok) {    QPtrList<KParts::ReadOnlyPart> frames = part->frames();    unsigned int len = frames.count();    if (i < len)      return true;  }  // allow shortcuts like 'Image1' instead of document.images.Image1  if (part->document().isHTMLDocument()) { // might be XML    DOM::HTMLDocument doc = part->htmlDocument();    // Keep in sync with tryGet    if (static_cast<DOM::DocumentImpl*>(doc.handle())->underDocNamedCache().get(p.qstring()))      return true;    return !doc.getElementById(p.string()).isNull();  }  return false;}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  // we don't want any operations on a closed window  if (m_frame.isNull() || m_frame->m_part.isNull()) {    if ( p == "closed" )      return Boolean( true );    return Undefined();  }  // Look for overrides first  ValueImp *val = getDirect(p);  if (val) {    //kdDebug(6070) << "Window::get found dynamic property '" << p.ascii() << "'" << endl;    return isSafeScript(exec) ? Value(val) : Undefined();  }  const HashEntry* entry = Lookup::findEntry(&WindowTable, p);  KHTMLPart *part = ::qt_cast<KHTMLPart *>(m_frame->m_part);  // properties that work on all windows  if (entry) {    // ReadOnlyPart first    switch(entry->value) {    case Closed:      return Boolean( false );    case _Location:        // No isSafeScript test here, we must be able to _set_ location.href (#49819)      return Value(location());    case _Window:    case Self:      return retrieve(m_frame->m_part);    default:        break;    }    if (!part)        return Undefined();    // KHTMLPart next    switch(entry->value) {    case Frames:      return Value(frames(exec));    case Opener:      if (!part->opener())        return Null();    // ### a null Window might be better, but == null      else                // doesn't work yet        return retrieve(part->opener());    case Parent:      return retrieve(part->parentPart() ? part->parentPart() : (KHTMLPart*)part);    case Top: {      KHTMLPart *p = part;      while (p->parentPart())        p = p->parentPart();      return retrieve(p);    }    case Alert:    case Confirm:    case Prompt:    case Open:    case Close:    case Focus:    case Blur:    case AToB:    case BToA:    case GetComputedStyle:      return lookupOrCreateFunction<WindowFunc>(exec,p,this,entry->value,entry->params,entry->attr);    default:      break;    }  } else if (!part) {    // not a  KHTMLPart    QString rvalue;    KParts::LiveConnectExtension::Type rtype;    unsigned long robjid;    if (m_frame->m_liveconnect &&        isSafeScript(exec) &&        m_frame->m_liveconnect->get(0, p.qstring(), rtype, robjid, rvalue))      return getLiveConnectValue(m_frame->m_liveconnect, p.qstring(), rtype, rvalue, robjid);    return Undefined();  }  // properties that only work on safe windows  if (isSafeScript(exec) &&  entry)  {    //kdDebug(6070) << "token: " << entry->value << endl;    switch( entry->value ) {    case Crypto:      return Undefined(); // ###    case DefaultStatus:      return String(UString(part->jsDefaultStatusBarText()));    case Status:      return String(UString(part->jsStatusBarText()));    case Document:      if (part->document().isNull()) {        kdDebug(6070) << "Document.write: adding <HTML><BODY> to create document" << endl;        part->begin();        part->write("<HTML><BODY>");        part->end();      }      return getDOMNode(exec,part->document());    case FrameElement:      if (m_frame->m_frame)        return getDOMNode(exec,m_frame->m_frame->element());      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 _History:      return Value(history ? history :                   (const_cast<Window*>(this)->history = new History(exec,part)));    case _External:      return Value(external ? external :                   (const_cast<Window*>(this)->external = new External(exec,part)));    case Event:      if (m_evt)        return getDOMEvent(exec,*m_evt);      else {#ifdef KJS_VERBOSE        kdDebug(6070) << "WARNING: window(" << this << "," << part->name() << ").event, no event!" << endl;#endif        return Undefined();      }    case InnerHeight:      if (!part->view())        return Undefined();      khtml::RenderWidget::flushWidgetResizes(); // make sure frames have their final size      return Number(part->view()->visibleHeight());    case InnerWidth:      if (!part->view())        return Undefined();      khtml::RenderWidget::flushWidgetResizes(); // make sure frames have their final size      return Number(part->view()->visibleWidth());    case Length:      return Number(part->frames().count());    case Name:      return String(part->name());    case SideBar:      return Value(new MozillaSidebarExtension(exec, part));    case _Navigator:    case ClientInformation: {      // Store the navigator in the object so we get the same one each time.      Value nav( new Navigator(exec, part) );      const_cast<Window *>(this)->put(exec, "navigator", nav, DontDelete|ReadOnly|Internal);      const_cast<Window *>(this)->put(exec, "clientInformation", nav, DontDelete|ReadOnly|Internal);      return nav;    }#ifdef Q_WS_QWS    case _Konqueror: {      Value k( new Konqueror(part) );      const_cast<Window *>(this)->put(exec, "konqueror", k, DontDelete|ReadOnly|Internal);      return k;    }#endif    case OffscreenBuffering:      return Boolean(true);    case OuterHeight:    case OuterWidth:    {#if defined Q_WS_X11 && ! defined K_WS_QTONLY      if (!part->widget())        return Number(0);      KWin::WindowInfo inf = KWin::windowInfo(part->widget()->topLevelWidget()->winId());      return Number(entry->value == OuterHeight ?                    inf.geometry().height() : inf.geometry().width());#else      return Number(entry->value == OuterHeight ?  		    part->view()->height() : part->view()->width());#endif    }    case PageXOffset:      return Number(part->view()->contentsX());    case PageYOffset:      return Number(part->view()->contentsY());    case Personalbar:      return Undefined(); // ###    case ScreenLeft:    case ScreenX: {      if (!part->view())        return Undefined();      QRect sg = KGlobalSettings::desktopGeometry(part->view());      return Number(part->view()->mapToGlobal(QPoint(0,0)).x() + sg.x());    }    case ScreenTop:    case ScreenY: {      if (!part->view())        return Undefined();      QRect sg = KGlobalSettings::desktopGeometry(part->view());      return Number(part->view()->mapToGlobal(QPoint(0,0)).y() + sg.y());    }    case ScrollX: {      if (!part->view())        return Undefined();      return Number(part->view()->contentsX());    }    case ScrollY: {      if (!part->view())        return Undefined();      return Number(part->view()->contentsY());    }    case Scrollbars:      return Undefined(); // ###    case _Screen:      return Value(screen ? screen :                   (const_cast<Window*>(this)->screen = new Screen(exec)));    case Image:      return Value(new ImageConstructorImp(exec, part->document()));    case Option:      return Value(new OptionConstructorImp(exec, part->document()));    case XMLHttpRequest:      return Value(new XMLHttpRequestConstructorImp(exec, part->document()));    case XMLSerializer:      return Value(new XMLSerializerConstructorImp(exec));    case DOMParser:      return Value(new DOMParserConstructorImp(exec, part->xmlDocImpl()));    case Scroll: // compatibility    case ScrollBy:    case ScrollTo:    case MoveBy:    case MoveTo:    case ResizeBy:    case ResizeTo:    case CaptureEvents:    case ReleaseEvents:    case AddEventListener:    case RemoveEventListener:    case SetTimeout:    case ClearTimeout:    case SetInterval:    case ClearInterval:    case Print:      return lookupOrCreateFunction<WindowFunc>(exec,p,this,entry->value,entry->params,entry->attr);    // IE extension    case Navigate:      // Disabled in NS-compat mode. Supported by default - can't hurt, unless someone uses      // if (navigate) to test for IE (unlikely).      if ( exec->interpreter()->compatMode() == Interpreter::NetscapeCompat )        return Undefined();      return lookupOrCreateFunction<WindowFunc>(exec,p,this,entry->value,entry->params,entry->attr);    case Onabort:      return getListener(exec,DOM::EventImpl::ABORT_EVENT);    case Onblur:      return getListener(exec,DOM::EventImpl::BLUR_EVENT);    case Onchange:      return getListener(exec,DOM::EventImpl::CHANGE_EVENT);    case Onclick:      return getListener(exec,DOM::EventImpl::KHTML_ECMA_CLICK_EVENT);    case Ondblclick:      return getListener(exec,DOM::EventImpl::KHTML_ECMA_DBLCLICK_EVENT);    case Ondragdrop:      return getListener(exec,DOM::EventImpl::KHTML_DRAGDROP_EVENT);    case Onerror:      return getListener(exec,DOM::EventImpl::KHTML_ERROR_EVENT);    case Onfocus:      return getListener(exec,DOM::EventImpl::FOCUS_EVENT);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -