📄 khtml_part.h
字号:
// -*- c-basic-offset: 2 -*-/* This file is part of the KDE project * * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> * 1999-2001 Lars Knoll <knoll@kde.org> * 1999-2001 Antti Koivisto <koivisto@kde.org> * 2000-2001 Simon Hausmann <hausmann@kde.org> * 2000-2001 Dirk Mueller <mueller@kde.org> * 2000 Stefan Schimanski <1Stein@gmx.de> * Copyright (C) 2004 Apple Computer, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */#ifndef __khtml_part_h__#define __khtml_part_h__#include "dom/html_document.h"#include "dom/dom2_range.h"#include "dom/dom_misc.h"#include "editing/htmlediting.h"#include <kparts/part.h>#include <kparts/browserextension.h>#include <qregexp.h>class KHTMLPartPrivate;class KHTMLPartBrowserExtension;class KJSProxy;class KHTMLView;class KHTMLSettings;class KJavaAppletContext;namespace DOM{ class CSSStyleDeclarationImpl; class DocumentImpl; class EventListener; class HTMLAnchorElementImpl; class HTMLDocument; class HTMLDocumentImpl; class HTMLElementImpl; class HTMLEventListener; class HTMLFormElementImpl; class HTMLFrameElementImpl; class HTMLIFrameElementImpl; class HTMLMetaElementImpl; class HTMLObjectElementImpl; class HTMLTitleElementImpl; class Node; class NodeImpl; class Range; class Selection;}namespace khtml{ class CachedObject; struct ChildFrame; class CSSStyleSelector; class DocLoader; class DrawContentsEvent; class EditCommand; class HTMLTokenizer; class MouseDoubleClickEvent; class MouseEvent; class MouseMoveEvent; class MousePressEvent; class MouseReleaseEvent; class RenderPart; class RenderPartObject; class RenderWidget; class XMLTokenizer;};namespace KJS { class Selection; class SelectionFunc; class Window; class WindowFunc; class JSEventListener; class DOMDocument;};namespace KParts{ class PartManager;};/** * This class is khtml's main class. It features an almost complete * web browser, and html renderer. * * The easiest way to use this class (if you just want to display an HTML * page at some URL) is the following: * * <pre> * KURL url = "http://www.kde.org"; * KHTMLPart *w = new KHTMLPart(); * w->openURL(url); * w->view()->resize(500, 400); * w->show(); * </pre> * * By default Java and JavaScript support are disabled. You can enable them by * using the @ref setJavaEnabled() and @ref setJScriptEnabled() methods. * * Some apps want to write their HTML code directly into the widget instead of * it opening an url. You can also do that in the following way: * * <pre> * QString myHTMLCode = ...; * KHTMLPart *w = new KHTMLPart(); * w->begin(); * w->write(myHTMLCode); * ... * w->end(); * </pre> * * You can do as many calls to write as you want. But there are two * @ref write() methods, one accepting a @ref QString one accepting a * @p char @p * argument. You should use one or the other * (but not both) since the method using * the @p char @p * argument does an additional decoding step to convert the * written data to Unicode. * * @short HTML Browser Widget * @author Lars Knoll (knoll@kde.org) * */class KHTMLPart : public KParts::ReadOnlyPart{ Q_OBJECT friend class KHTMLView; friend class DOM::HTMLTitleElementImpl; friend class DOM::HTMLFrameElementImpl; friend class DOM::HTMLIFrameElementImpl; friend class DOM::HTMLObjectElementImpl; friend class DOM::HTMLAnchorElementImpl; friend class DOM::HTMLMetaElementImpl; friend class DOM::NodeImpl; friend class KHTMLRun; friend class DOM::HTMLFormElementImpl; friend class khtml::RenderPartObject; friend class KJS::Selection; friend class KJS::SelectionFunc; friend class KJS::Window; friend class KJS::WindowFunc; friend class KJS::JSEventListener; friend class KJS::DOMDocument; friend class KJSProxy; friend class KHTMLPartBrowserExtension; friend class DOM::DocumentImpl; friend class DOM::HTMLDocumentImpl; friend class KHTMLPartBrowserHostExtension; friend class khtml::HTMLTokenizer; friend class khtml::XMLTokenizer; friend class khtml::RenderWidget; friend class khtml::CSSStyleSelector; friend class KHTMLPartIface; Q_PROPERTY( bool javaScriptEnabled READ jScriptEnabled WRITE setJScriptEnabled ) Q_PROPERTY( bool javaEnabled READ javaEnabled WRITE setJavaEnabled ) Q_PROPERTY( bool autoloadImages READ autoloadImages WRITE setAutoloadImages ) Q_PROPERTY( bool dndEnabled READ dndEnabled WRITE setDNDEnabled ) Q_PROPERTY( bool pluginsEnabled READ pluginsEnabled WRITE setPluginsEnabled ) Q_PROPERTY( bool onlyLocalReferences READ onlyLocalReferences WRITE setOnlyLocalReferences ) Q_PROPERTY( QCString dcopObjectId READ dcopObjectId )public: enum GUIProfile { DefaultGUI, BrowserViewGUI /* ... */ }; enum { NoXPosForVerticalArrowNavigation = INT_MIN }; /** * Constructs a new KHTMLPart. * * KHTML basically consists of two objects: The KHTMLPart itself, * holding the document data (DOM document), and the @ref KHTMLView, * derived from @ref QScrollView, in which the document content is * rendered in. You can specify two different parent objects for a * KHTMLPart, one parent for the KHTMLPart document and on parent * for the @ref KHTMLView. If the second @p parent argument is 0L, then * @p parentWidget is used as parent for both objects, the part and * the view. */ KHTMLPart( QWidget *parentWidget = 0, const char *widgetname = 0, QObject *parent = 0, const char *name = 0, GUIProfile prof = DefaultGUI ); KHTMLPart( KHTMLView *view, QObject *parent = 0, const char *name = 0, GUIProfile prof = DefaultGUI ); /** * Destructor. */ virtual ~KHTMLPart(); /** * Opens the specified URL @p url. * * Reimplemented from @ref KParts::ReadOnlyPart::openURL . */ virtual bool openURL( const KURL &url ); /** * Stops loading the document and kill all data requests (for images, etc.) */ virtual bool closeURL();#if !APPLE_CHANGES /** * is called when a certain error situation (i.e. connection timed out) occured. * default implementation either shows a KIO error dialog or loads a more verbose * error description a as page, depending on the users configuration. * @p job is the job that signaled the error situation */ virtual void showError(KIO::Job* job);#endif /** * Returns a reference to the DOM HTML document (for non-HTML documents, returns null) */ DOM::HTMLDocument htmlDocument() const; /** * Returns a reference to the DOM document. */ DOM::Document document() const; /** * Returns the node that has the keyboard focus. */ DOM::Node activeNode() const; /** * Returns a pointer to the @ref KParts::BrowserExtension. */ KParts::BrowserExtension *browserExtension() const; /** * Returns a pointer to the HTML document's view. */ KHTMLView *view() const; /** * Enable/disable Javascript support. Note that this will * in either case permanently override the default usersetting. * If you want to have the default UserSettings, don't call this * method. */ void setJScriptEnabled( bool enable ); /** * Returns @p true if Javascript support is enabled or @p false * otherwise. */ bool jScriptEnabled() const; /** * Enable/disable the automatic forwarding by <meta http-equiv="refresh" ....> */ void setMetaRefreshEnabled( bool enable ); /** * Returns @p true if automtaic forwarding is enabled. */ bool metaRefreshEnabled() const; /** * Execute the specified snippet of JavaScript code. * * Returns @p true if JavaScript was enabled, no error occured * and the code returned true itself or @p false otherwise. * @deprecated, use the one below. */ QVariant executeScript( const QString &script, bool forceUserGesture = false ); /** * Same as above except the Node parameter specifying the 'this' value. */ QVariant executeScript( const DOM::Node &n, const QString &script, bool forceUserGesture = false ); /** * Enables or disables Drag'n'Drop support. A drag operation is started if * the users drags a link. */ void setDNDEnabled( bool b ); /** * Returns whether Dragn'n'Drop support is enabled or not. */ bool dndEnabled() const; /** * Implementation of CSS property -khtml-user-drag == auto */ virtual bool shouldDragAutoNode(DOM::NodeImpl*) const; /** * Enables/disables Java applet support. Note that calling this function * will permanently override the User settings about Java applet support. * Not calling this function is the only way to let the default settings * apply. */ void setJavaEnabled( bool enable ); /** * Return if Java applet support is enabled/disabled. */ bool javaEnabled() const; /** * Returns the java context of the applets. If no applet exists, 0 is returned. */ KJavaAppletContext *javaContext(); /** * Returns the java context of the applets. If no context exists yet, a new one is * created. */ KJavaAppletContext *createJavaContext(); /** * Enables or disables plugins via, default is enabled */ void setPluginsEnabled( bool enable ); /** * Returns trie if plugins are enabled/disabled. */ bool pluginsEnabled() const; /** * Specifies whether images contained in the document should be loaded * automatically or not. * * @note Request will be ignored if called before @ref begin(). */ void setAutoloadImages( bool enable ); /** * Returns whether images contained in the document are loaded automatically * or not. * @note that the returned information is unrelieable as long as no begin() * was called. */ bool autoloadImages() const; /** * Security option. * * Specify whether only local references ( stylesheets, images, scripts, subdocuments ) * should be loaded. ( default false - everything is loaded, if the more specific * options allow ) */ void setOnlyLocalReferences(bool enable); /** * Returns whether references should be loaded ( default false ) **/ bool onlyLocalReferences() const;#ifndef KDE_NO_COMPAT void enableJScript(bool e) { setJScriptEnabled(e); } void enableJava(bool e) { setJavaEnabled(e); } void enablePlugins(bool e) { setPluginsEnabled(e); } void autoloadImages(bool e) { setAutoloadImages(e); } void enableMetaRefresh(bool e) { setMetaRefreshEnabled(e); } bool setCharset( const QString &, bool ) { return true; } KURL baseURL() const; QString baseTarget() const;#endif /** * Returns the URL for the background Image (used by save background) */ KURL backgroundURL() const; /** * Schedules a redirection after @p delay seconds. * Note that this is used for JavaScript-triggered location changes as well. */ void scheduleRedirection( double delay, const QString &url, bool lockHistory = true, bool userGesture = false ); /** * Schedules a history navigation operation (go forward, go back, etc.). * This is used for JavaScript-triggered location changes. */ void scheduleHistoryNavigation( int steps ); /** * Clears the widget and prepares it for new content. * * If you want @ref url() to return * for example "file:/tmp/test.html", you can use the following code: * <PRE> * view->begin( KURL("file:/tmp/test.html" ) ); * </PRE> * * @param url is the url of the document to be displayed. Even if you * are generating the HTML on the fly, it may be useful to specify * a directory so that any pixmaps are found. * * @param xOffset is the initial horizontal scrollbar value. Usually * you don't want to use this. * * @param yOffset is the initial vertical scrollbar value. Usually * you don't want to use this. * * All child frames and the old document are removed if you call * this method. */ virtual void begin( const KURL &url = KURL(), int xOffset = 0, int yOffset = 0 ); /** * Writes another part of the HTML code to the widget. * * You may call * this function many times in sequence. But remember: The fewer calls * you make, the faster the widget will be. * * The HTML code is send through a decoder which decodes the stream to * Unicode. * * The @p len parameter is needed for streams encoded in utf-16, * since these can have \0 chars in them. In case the encoding * you're using isn't utf-16, you can safely leave out the length * parameter.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -