QWebFrame::evaluateJavaScript 与 HTML 中的脚本标签

发布于 2024-09-02 02:50:01 字数 824 浏览 14 评论 0原文

我想开发一个使用 QtWebKit 和 JQuery 的应用程序。

我需要知道的是,从文件中读取 JQuery 并对其进行评估,或者将其作为脚本标签嵌入到小部件中显示的“页面”中,有什么区别吗?

编辑:看来我至少部分地弄清楚了这一点。显然,evaluateJavaScript 会可靠地工作;但如果我这样做,

baseurl = QUrl.fromLocalFile(
  QDir.current().absoluteFilePath("doesntexist.html"));
view.setHtml(
  u"""
    <html>
      <head>
        <script type="text/javascript" 
          src="jquery-1.4.2.js">
        </script>
      </head>
      <body></body>
    </html>""", baseurl);

该文件甚至永远不会从磁盘读取(用 inotify 检查)。 初始化的 baseurl

QUrl("file:/")
QUrl(".");
QUrl();

这也会影响使用或

QUrl("file://")

我还尝试将脚本 src 参数更改为硬盘驱动器上的绝对路径,以及前面带或不带“./”的相对路径。

我如何正确地(除了 Qt 资源系统)让脚本标签与本地 js 文件一起使用?这只是记录不足,还是我遗漏了一些东西?

I want to develop an application that uses QtWebKit and JQuery.

What I need to know is, is there any difference between reading JQuery from a file and evaluateJavaScript it, or embedding it as a script tag within the "page" that is displayed within the widget?

EDIT: It seems that I have this figured out at least partially. evaluateJavaScript will apparently work reliably; but if I do

baseurl = QUrl.fromLocalFile(
  QDir.current().absoluteFilePath("doesntexist.html"));
view.setHtml(
  u"""
    <html>
      <head>
        <script type="text/javascript" 
          src="jquery-1.4.2.js">
        </script>
      </head>
      <body></body>
    </html>""", baseurl);

The file is never even read from disk (checked with inotify). this also affects baseurl being initialized with either

QUrl("file:/")
QUrl(".");
QUrl();

or

QUrl("file://")

And I have also tried to change the script src parameter to absolute paths on the hard drive, and to a relative path with and without "./" in front.

How do I do it right (aside from the Qt Resource System) to get the script tag to work with local js files? Is this just poorly documented, or am I missing something?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

凡间太子 2024-09-09 02:50:01

您可以使用 Qt 资源系统 并将您的 html 修改为类似这样的内容

<script type="text/javascript" 
      src=":/jquery-1.4.2.js">

,然后不要不要忘记main中的调用宏Q_INIT_RESOURCE

或使用evaluateJavaScript

connect(view, SIGNAL(loadFinished(bool)), this, SLOT(loadJQuery()));

...

void MainWindow::loadJQuery()
{
  QFile file("jquery-1.4.2.js");
  file.open(QFile::ReadOnly);
  view->page()->mainFrame()->evaluateJavaScript(file.readAll());
}

我想使用资源系统更好。

You can use the Qt Resource System and modify your html to something like this

<script type="text/javascript" 
      src=":/jquery-1.4.2.js">

and don't forget the call macro Q_INIT_RESOURCE in main

or using the evaluateJavaScript

connect(view, SIGNAL(loadFinished(bool)), this, SLOT(loadJQuery()));

...

void MainWindow::loadJQuery()
{
  QFile file("jquery-1.4.2.js");
  file.open(QFile::ReadOnly);
  view->page()->mainFrame()->evaluateJavaScript(file.readAll());
}

I guess using the resource systems is better.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文