在inApp浏览器中注入代码并在应用程序中获取其返回值

2023-12-19

我正在编写一个phonegap应用程序,它在inAppBrowser内启动一个网络应用程序。 我想从这个网络应用程序获得某些反馈,以便在我的phonegap应用程序中进一步使用它。

因此,用户启动 Web 应用程序,在那里执行一些操作,然后单击按钮后,Web 应用程序将向 PhoneGap 应用程序返回一个值。

我想我可以使用 inAppBrowser 的 executeScript 方法来注入一个函数,该函数将使用某个事件在 Web 应用程序内部调用,并且当调用该函数时,在 Web 应用程序内部评估其返回值。 我发现的只是phonegap 的不太完整的文档以及stackoverflow 上的这个问题:使用本机功能增强 Web 应用程序 - 将 PhoneGap 的 InAppBrowser 与 Rails Web 应用程序应用程序 javascript 桥接 https://stackoverflow.com/questions/16317901/augmenting-a-webapp-with-native-capabilities-bridging-phonegaps-inappbrowser

遗憾的是它没有按我的预期工作,因为回调函数立即触发,而不等待注入的函数执行。

这是我的移动应用程序代码

<!DOCTYPE html>
<html>
  <head>
    <title>InAppBrowser.executeScript Example</title>

    <script type="text/javascript" charset="utf-8" src="cordova-2.7.0.js"></script>
    <script type="text/javascript" charset="utf-8">

    // Wait for Cordova to load
    //
    document.addEventListener("deviceready", onDeviceReady, false);

    // Global InAppBrowser reference
    var iabRef = null;

    // Inject our custom JavaScript into the InAppBrowser window
    //
    function addFeebackFunction() {
        iabRef.executeScript(
            {code: "var evaluateFeedback = function(){return 'Done';};"},
            function(data) {
                alert(data);
            }
        );
        //iabRef.close();
    }

    function iabClose(event) {
         iabRef.removeEventListener('loadstop', addFeebackFunction);
         iabRef.removeEventListener('exit', iabClose);
    }

    // Cordova is ready
    //
    function onDeviceReady() {
         iabRef = window.open('http://{ipaddress}/test/', '_blank', 'location=no');
         iabRef.addEventListener('loadstop', addFeebackFunction);
         iabRef.addEventListener('exit', iabClose);
    }

    </script>
  </head>
  <body>
      <h1>Mobile App</h1>
  </body>
</html>

她是我的网络应用程序代码

<!DOCTYPE HTML>
<html>
<head>
    <title>
        Test
    </title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">

    <script type="text/javascript" src="./js/jquery-1.8.3.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            $('#get-feedback').click(function() {
                var feedback = $('#feedback').val();
                evaluateFeedback(feedback);
            });
        });
    </script>
</head>
<body>
<div data-role="page">
    <article data-role="content">
        <h1>Web app</h1>
        <input type="text" id="feedback" /><br />
        <button type="button" id="get-feedback">Feedback</button>
    </article>
</div>
</body>
</html>

只是一个疯狂的猜测,但你没有执行这个函数......

{代码:“var evaluateFeedback = function(){return 'Done';};evaluateFeedback();”}

或更好: {代码:“‘完成’;”}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在inApp浏览器中注入代码并在应用程序中获取其返回值 的相关文章

随机推荐