4

一旦完全加载到网页中,我就会向网页添加一个脚本标签WebEngineView,但它会以某种方式静默失败。

webview.runJavaScript我通过调用以下代码来注入脚本:

var s = document.createElement('script');
s.src = "qrc:/jquery-2.1.4.min.js";
document.body.appendChild(s);

这是完全标准的,在某种程度上它按预期工作,即,如果我查看html页面的源代码,脚本标签确实已附加到正文中。

问题是脚本没有被下载,或者没有被评估,或者其他什么。我所知道的是在上面的例子中 jQuery 函数不可用。如果我用一个全局变量加载一个小的 JavaScript 测试文件,该变量也不可用。将 url 更改为 http 而不是 qrc 并将其指向 Web 服务器没有区别。

注入img标签工作正常;图像被加载并显示。

但是 JavaScript 不知何故坏了。有谁知道如何解决这一问题?

4

1 回答 1

2

这个问题与 QML 和 JavaScript 的异步特性有关。

我正在插入一个脚本标签来注入 jQuery,然后我正在调用一个函数来消除我插入的 jQuery 版本与原始页面中可能已经存在的任何 jQuery 版本的冲突。

但是我相信在调用我的去冲突函数之前,webview 还没有完成对插入的 jQuery 库的解析,所以它失败了。(我对浏览器编程不是很有经验,或者我可能从一开始就怀疑这一点。)

解决方案是使用插入 jQuery 的少量 JavaScript 插入脚本标记,然后设置超时等待 200 毫秒,然后再调用解除冲突函数。像这样:

function insertAuhJQuery(){
var s = document.createElement("script");
s.src = "qrc:/jquery-2.1.4.min.js";
document.body.appendChild(s);
window.setTimeout(deConflictJQuery, 200);
}

function deConflictJQuery(){
auh = {};
auh.$ = jQuery.noConflict(true);
}

insertAuhJQuery()

这可靠地工作并且对于我的目的是可以接受的。

于 2015-06-30T14:53:41.153 回答