Ios Phonegap构建和WKWebView:我们这里的问题是沟通失败

Ios Phonegap构建和WKWebView:我们这里的问题是沟通失败,ios,cordova,phonegap-build,wkwebview,Ios,Cordova,Phonegap Build,Wkwebview,WKWebview和Phonegap构建:index.js和WKWebview之间是否可以通信 我正在使用Phonegap Build生成我的移动设备可执行文件。我正在打开一个网络视图并从我们的网站加载一个页面。在使用UIWebView时,我在移动设备上对index.js进行编码以侦听loadstop事件并调用executescript在webview中的网页上执行javascript并将结果返回到index.js,在那里我可以做任何我需要的事情 但是UIWebView速度很慢,所以对于iOS,

WKWebview和Phonegap构建:index.js和WKWebview之间是否可以通信

我正在使用Phonegap Build生成我的移动设备可执行文件。我正在打开一个网络视图并从我们的网站加载一个页面。在使用UIWebView时,我在移动设备上对index.js进行编码以侦听loadstop事件并调用executescript在webview中的网页上执行javascript并将结果返回到index.js,在那里我可以做任何我需要的事情

但是UIWebView速度很慢,所以对于iOS,我一直在尝试通过cordova插件WKWebView引擎插件让WKWebView工作

我可以让WKWebview打开我的URL,与UIWebView相比,它的速度非常快,但经过几天的搜索(谷歌知道的每一个包含“WKWebview”和“Phonegap”的页面)和实验,我一直找不到任何检测loadstop(或类似内容)的方法,我也没有找到任何方法从index.js在WKWebView中执行脚本

我可能很乐意使用index.js和WKWebView之间的任何通信方法。loadstop事件后是否有类似于executescript的过程,即使它是异步的?是否有某种类型的消息传递功能

我想看看index.js的一些代码示例

我开始认为我必须打破僵局,在xcode中学习本机代码才能实现这一点。我当然希望不会,因为到目前为止,Phonegap构建对我来说效果很好

有人在这件事上运气好吗

下面是在UIWebView下工作的代码。在WKWebView下,它可以很好地打开URL,但loadstop不会触发,也不会执行脚本



50个煮熟的鸡蛋给任何能帮我工作的人。

InApp Browser是个反复无常的野兽,很乐意帮忙!作为参考,我现在有一个使用InApp Browser和WKWebView的应用程序,两者都使用以下功能:

“加载停止”未启动:

  • 自我与空白: 我通常通过“_blank”而不是“self”打开浏览器。试试看
  • InAppBrowser的较新版本仍应自动别名为“window.open”,但。您可以在DeviceRady事件中这样做:

    window.open=cordova.InAppBrowser.open

  • 或者,也许更安全的选择是,只需使用“cordova.InAppBrowser.open”

    这是我使用的代码。请尝试打印或“提醒”-取消正在通过的URL。它们可能不是您所期望的,尤其是在存在多个重定向的情况下

    var inAppBrowserRef = cordova.InAppBrowser.open("www.google.com", '_blank', 'location=no,toolbar=yes');
            inAppBrowserRef.addEventListener('loadstop', function(event) {
                console.log("loadstop: " + event.url);
                alert("loadstop: " + event.url);
    
                // run execute script code
                }
            });
    
    此外,请确保在“deviceready”事件触发期间/之后使用InAppBrowser

    执行脚本发布

    我相信这里的问题是你的代码没有启动,将其包装成函数并立即调用:

    ref.executeScript(
                    { code: 'var runCode = function() { window.location.search; } runCode();' },
                    function (value) {
                        var requestString = value[0];
                        console.log("McMApp loadstop request string: " + requestString);
                    });
    
    我不完全确定,但是您不应该也向位置搜索函数传递一个参数吗

    // Append "someData" as url parameter query
    window.location.search = "someData";
    

    最后,请注意,WKWebView目前确实存在许多已知问题。始终首先检查GitHub或ApacheCordova官方网站等上的已知问题,因为正如您所写的,您可能会浪费很多时间而一事无成。我目前正在使用-这个团队比“官方”插件修复bug的速度要快得多,所以你可以尝试一下。

    InAppBrowser是一个反复无常的野兽,非常乐意提供帮助!作为参考,我现在有一个使用InApp Browser和WKWebView的应用程序,两者都使用以下功能:

    “加载停止”未启动:

  • 自我与空白: 我通常通过“_blank”而不是“self”打开浏览器。试试看
  • InAppBrowser的较新版本仍应自动别名为“window.open”,但。您可以在DeviceRady事件中这样做:

    window.open=cordova.InAppBrowser.open

  • 或者,也许更安全的选择是,只需使用“cordova.InAppBrowser.open”

    这是我使用的代码。请尝试打印或“提醒”-取消正在通过的URL。它们可能不是您所期望的,尤其是在存在多个重定向的情况下

    var inAppBrowserRef = cordova.InAppBrowser.open("www.google.com", '_blank', 'location=no,toolbar=yes');
            inAppBrowserRef.addEventListener('loadstop', function(event) {
                console.log("loadstop: " + event.url);
                alert("loadstop: " + event.url);
    
                // run execute script code
                }
            });
    
    此外,请确保在“deviceready”事件触发期间/之后使用InAppBrowser

    执行脚本发布

    我相信这里的问题是你的代码没有启动,将其包装成函数并立即调用:

    ref.executeScript(
                    { code: 'var runCode = function() { window.location.search; } runCode();' },
                    function (value) {
                        var requestString = value[0];
                        console.log("McMApp loadstop request string: " + requestString);
                    });
    
    我不完全确定,但是您不应该也向位置搜索函数传递一个参数吗

    // Append "someData" as url parameter query
    window.location.search = "someData";
    
    最后,请注意,WKWebView目前确实存在许多已知问题。始终首先检查GitHub或ApacheCordova官方网站等上的已知问题,因为正如您所写的,您可能会浪费很多时间而一事无成。我目前正在使用-这个团队比“官方”插件修复bug的速度要快得多,所以你可以试试