📄 kjs_window.cpp
字号:
else if (p == "prompt") return Function(new WindowFunc(this, WindowFunc::Prompt)); else if (p == "open") return Function(new WindowFunc(this, WindowFunc::Open)); else if (p == "setTimeout") { if (isSafeScript()) return Function(new WindowFunc(this, WindowFunc::SetTimeout)); else return Undefined(); } else if (p == "clearTimeout") { if (isSafeScript()) return Function(new WindowFunc(this, WindowFunc::ClearTimeout)); else return Undefined(); } else if (p == "focus") return Function(new WindowFunc(this, WindowFunc::Focus)); else if (p == "blur") return Function(new WindowFunc(this, WindowFunc::Blur)); else if (p == "close") return Function(new WindowFunc(this, WindowFunc::Close)); else if (p == "setInterval") { if (isSafeScript()) return Function(new WindowFunc(this, WindowFunc::SetInterval)); else return Undefined(); } else if (p == "clearInterval") { if (isSafeScript()) return Function(new WindowFunc(this, WindowFunc::ClearInterval)); else return Undefined(); } else if (p == "onabort") { if (isSafeScript()) return getListener(DOM::EventImpl::ABORT_EVENT); else return Undefined(); } else if (p == "onblur") { if (isSafeScript()) return getListener(DOM::EventImpl::BLUR_EVENT); else return Undefined(); } else if (p == "onchange") { if (isSafeScript()) return getListener(DOM::EventImpl::CHANGE_EVENT); else return Undefined(); } else if (p == "onclick") { if (isSafeScript()) return getListener(DOM::EventImpl::KHTML_CLICK_EVENT); else return Undefined(); } else if (p == "ondblclick") { if (isSafeScript()) return getListener(DOM::EventImpl::KHTML_DBLCLICK_EVENT); else return Undefined(); } else if (p == "ondragdrop") { if (isSafeScript()) return getListener(DOM::EventImpl::KHTML_DRAGDROP_EVENT); else return Undefined(); } else if (p == "onerror") { if (isSafeScript()) return getListener(DOM::EventImpl::KHTML_ERROR_EVENT); else return Undefined(); } else if (p == "onfocus") { if (isSafeScript()) return getListener(DOM::EventImpl::FOCUS_EVENT); else return Undefined(); } else if (p == "onkeydown") { if (isSafeScript()) return getListener(DOM::EventImpl::KHTML_KEYDOWN_EVENT); else return Undefined(); } else if (p == "onkeypress") { if (isSafeScript()) return getListener(DOM::EventImpl::KHTML_KEYPRESS_EVENT); else return Undefined(); } else if (p == "onkeyup") { if (isSafeScript()) return getListener(DOM::EventImpl::KHTML_KEYUP_EVENT); else return Undefined(); } else if (p == "onload") { if (isSafeScript()) return getListener(DOM::EventImpl::LOAD_EVENT); else return Undefined(); } else if (p == "onmousedown") { if (isSafeScript()) return getListener(DOM::EventImpl::MOUSEDOWN_EVENT); else return Undefined(); } else if (p == "onmousemove") { if (isSafeScript()) return getListener(DOM::EventImpl::MOUSEMOVE_EVENT); else return Undefined(); } else if (p == "onmouseout") { if (isSafeScript()) return getListener(DOM::EventImpl::MOUSEOUT_EVENT); else return Undefined(); } else if (p == "onmouseover") { if (isSafeScript()) return getListener(DOM::EventImpl::MOUSEOVER_EVENT); else return Undefined(); } else if (p == "onmouseup") { if (isSafeScript()) return getListener(DOM::EventImpl::MOUSEUP_EVENT); else return Undefined(); } else if (p == "onmove") { if (isSafeScript()) return getListener(DOM::EventImpl::KHTML_MOVE_EVENT); else return Undefined(); } else if (p == "onreset") { if (isSafeScript()) return getListener(DOM::EventImpl::RESET_EVENT); else return Undefined(); } else if (p == "onresize") { if (isSafeScript()) return getListener(DOM::EventImpl::RESIZE_EVENT); else return Undefined(); } else if (p == "onselect") { if (isSafeScript()) return getListener(DOM::EventImpl::SELECT_EVENT); else return Undefined(); } else if (p == "onsubmit") { if (isSafeScript()) return getListener(DOM::EventImpl::SUBMIT_EVENT); else return Undefined(); } else if (p == "onunload") { if (isSafeScript()) return getListener(DOM::EventImpl::UNLOAD_EVENT); else return Undefined(); } KHTMLPart *kp = m_part->findFrame( p.qstring() ); if (kp) return KJSO(retrieve(kp)); // allow shortcuts like 'Image1' instead of document.images.Image1 if (isSafeScript() && 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(element); } } return Undefined();}void Window::put(const UString &p, const KJSO &v){ if (p == "status") { String s = v.toString(); m_part->setJSStatusBarText(s.value().qstring()); } else if (p == "defaultStatus" || p == "defaultstatus") { String s = v.toString(); m_part->setJSDefaultStatusBarText(s.value().qstring()); } else if (p == "location") { QString str = v.toString().value().qstring(); m_part->scheduleRedirection(0, Window::retrieveActive()->m_part-> completeURL(str).url().prepend( "target://_self/#" )); } else if (p == "onabort") { if (isSafeScript()) setListener(DOM::EventImpl::ABORT_EVENT,v); } else if (p == "onblur") { if (isSafeScript()) setListener(DOM::EventImpl::BLUR_EVENT,v); } else if (p == "onchange") { if (isSafeScript()) setListener(DOM::EventImpl::CHANGE_EVENT,v); } else if (p == "onclick") { if (isSafeScript()) setListener(DOM::EventImpl::KHTML_CLICK_EVENT,v); } else if (p == "ondblclick") { if (isSafeScript()) setListener(DOM::EventImpl::KHTML_DBLCLICK_EVENT,v); } else if (p == "ondragdrop") { if (isSafeScript()) setListener(DOM::EventImpl::KHTML_DRAGDROP_EVENT,v); } else if (p == "onerror") { if (isSafeScript()) setListener(DOM::EventImpl::KHTML_ERROR_EVENT,v); } else if (p == "onfocus") { if (isSafeScript()) setListener(DOM::EventImpl::FOCUS_EVENT,v); } else if (p == "onkeydown") { if (isSafeScript()) setListener(DOM::EventImpl::KHTML_KEYDOWN_EVENT,v); } else if (p == "onkeypress") { if (isSafeScript()) setListener(DOM::EventImpl::KHTML_KEYPRESS_EVENT,v); } else if (p == "onkeyup") { if (isSafeScript()) setListener(DOM::EventImpl::KHTML_KEYUP_EVENT,v); } else if (p == "onload") { if (isSafeScript()) setListener(DOM::EventImpl::LOAD_EVENT,v); } else if (p == "onmousedown") { if (isSafeScript()) setListener(DOM::EventImpl::MOUSEDOWN_EVENT,v); } else if (p == "onmousemove") { if (isSafeScript()) setListener(DOM::EventImpl::MOUSEMOVE_EVENT,v); } else if (p == "onmouseout") { if (isSafeScript()) setListener(DOM::EventImpl::MOUSEOUT_EVENT,v); } else if (p == "onmouseover") { if (isSafeScript()) setListener(DOM::EventImpl::MOUSEOVER_EVENT,v); } else if (p == "onmouseup") { if (isSafeScript()) setListener(DOM::EventImpl::MOUSEUP_EVENT,v); } else if (p == "onmove") { if (isSafeScript()) setListener(DOM::EventImpl::KHTML_MOVE_EVENT,v); } else if (p == "onreset") { if (isSafeScript()) setListener(DOM::EventImpl::RESET_EVENT,v); } else if (p == "onresize") { if (isSafeScript()) setListener(DOM::EventImpl::RESIZE_EVENT,v); } else if (p == "onselect") { if (isSafeScript()) setListener(DOM::EventImpl::SELECT_EVENT,v); } else if (p == "onsubmit") { if (isSafeScript()) setListener(DOM::EventImpl::SUBMIT_EVENT,v); } else if (p == "onunload") { if (isSafeScript()) setListener(DOM::EventImpl::UNLOAD_EVENT,v); } else if (p == "name") { if (isSafeScript()) m_part->setName( v.toString().value().qstring().local8Bit().data() ); } else { if (isSafeScript()) Imp::put(p, v); }}Boolean Window::toBoolean() const{ return Boolean(!m_part.isNull());}int Window::installTimeout(const UString &handler, int t, bool singleShot){ return winq->installTimeout(handler, t, singleShot);}void Window::clearTimeout(int timerId){ winq->clearTimeout(timerId);}void Window::scheduleClose(){ kdDebug(6070) << "WindowFunc::tryExecute window.close() " << m_part << endl; QTimer::singleShot( 0, winq, SLOT( timeoutClose() ) );}bool Window::isSafeScript() const{ KHTMLPart *act = (KHTMLPart*)KJS::Global::current().extra(); if (!act) kdDebug(6070) << "Window::isSafeScript: KJS::Global::current().extra() is 0L!" << endl; return act && originCheck(m_part->url(), act->url());}void Window::setListener(int eventId, KJSO func){ if (!isSafeScript()) return; DOM::DocumentImpl *doc = static_cast<DOM::DocumentImpl*>(m_part->htmlDocument().handle()); if (!doc) return; doc->setWindowEventListener(eventId,getJSEventListener(func,true));}KJSO Window::getListener(int eventId) const{ if (!isSafeScript()) return Undefined(); DOM::DocumentImpl *doc = static_cast<DOM::DocumentImpl*>(m_part->htmlDocument().handle()); if (!doc) return Undefined(); DOM::EventListener *listener = doc->getWindowEventListener(eventId); if (listener) return static_cast<JSEventListener*>(listener)->listenerObj(); else return Null();}JSEventListener *Window::getJSEventListener(const KJSO &obj, bool html){ if (obj.isA(KJS::NullType)) return 0; QListIterator<JSEventListener> it(jsEventListeners); for (; it.current(); ++it) if (it.current()->listenerObj().imp() == obj.imp()) return it.current(); JSEventListener *listener = new JSEventListener(obj,KJSO(this),html);// jsEventListeners.append(listener); return listener;}void Window::clear(){ delete winq; winq = 0;}Completion WindowFunc::tryExecute(const List &args){ KJSO result; QString str, str2; int i; KHTMLPart *part = window->m_part; if (!part) return Completion(Normal); KHTMLView *widget = part->view(); KJSO v = args[0]; String s = v.toString(); str = s.value().qstring(); KJScript *currentScript = KJScript::current(); switch (id) { case Alert: part->xmlDocImpl()->updateRendering(); KMessageBox::error(widget, str, "JavaScript"); result = Undefined(); break; case Confirm: part->xmlDocImpl()->updateRendering(); i = KMessageBox::warningYesNo(widget, str, "JavaScript", i18n("OK"), i18n("Cancel")); result = Boolean((i == KMessageBox::Yes)); break; case Prompt: part->xmlDocImpl()->updateRendering(); if (args.size() >= 2) str2 = QInputDialog::getText("Konqueror: Prompt", str, args[1].toString().value().qstring()); else str2 = QInputDialog::getText("Konqueror: Prompt", str); result = String(str2); break; case Open: { KConfig *config = new KConfig("konquerorrc"); config->setGroup("Java/JavaScript Settings"); int policy = config->readUnsignedNumEntry( "WindowOpenPolicy", 0 ); if ( policy == 1 ) { if ( KMessageBox::questionYesNo(widget, i18n( "This site is trying to open up a new browser " "window using Javascript.\n\n" "Do you want to allow this?" ), i18n( "Confirmation: Javascript Popup" ) ) == KMessageBox::Yes ) policy = 0; } if ( policy ) { result = Undefined(); } else { KParts::WindowArgs winargs; // scan feature argument v = args[2]; QString features; if (v.isDefined()) { features = v.toString().value().qstring(); // specifying window params means false defaults winargs.menuBarVisible = false; winargs.toolBarsVisible = false; winargs.statusBarVisible = false; QStringList flist = QStringList::split(',', features); QStringList::ConstIterator it = flist.begin(); while (it != flist.end()) { QString s = *it++; QString key, val; int pos = s.find('='); if (pos >= 0) { key = s.left(pos).stripWhiteSpace().lower(); val = s.mid(pos + 1).stripWhiteSpace().lower(); if (key == "left" || key == "screenx") winargs.x = val.toInt(); else if (key == "top" || key == "screeny") winargs.y = val.toInt(); else if (key == "height") winargs.height = val.toInt() + 4; else if (key == "width") winargs.width = val.toInt() + 4;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -