Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Android WebView-检测是否定义了JS函数_Javascript_Android_Webview - Fatal编程技术网

Javascript Android WebView-检测是否定义了JS函数

Javascript Android WebView-检测是否定义了JS函数,javascript,android,webview,Javascript,Android,Webview,我正在编写一个HTML/JS应用程序,它在Android上的WebView下运行。在某些情况下,可能无法加载包含应用程序的页面,或者可能会加载另一个页面,例如404页面或类似页面。通常,我需要在应用程序页面上运行一组JS函数,或者在应用程序页面未加载的情况下执行另一组操作 我试图通过检测适当的JS是否可用来检测是否加载了适当的页面,但我似乎找不到任何同步的方法——只能通过调用JS函数并期望通过JavasctiptInterface进行回调。虽然这种方法是可行的,但我想知道是否有更好、更优雅、更可

我正在编写一个HTML/JS应用程序,它在Android上的WebView下运行。在某些情况下,可能无法加载包含应用程序的页面,或者可能会加载另一个页面,例如404页面或类似页面。通常,我需要在应用程序页面上运行一组JS函数,或者在应用程序页面未加载的情况下执行另一组操作

我试图通过检测适当的JS是否可用来检测是否加载了适当的页面,但我似乎找不到任何同步的方法——只能通过调用JS函数并期望通过JavasctiptInterface进行回调。虽然这种方法是可行的,但我想知道是否有更好、更优雅、更可靠的方法来实现这一点

我当然不能通过分析页面的URL来做到这一点——它可能是正确的,但内容错误


有什么想法吗?

我想你能做到,请看这个项目,你会找到答案的

PhoneGap是一个非常棒的移动平台免费框架

@JavascriptInterface
public void onLoaded(String result) {
    if (result.equals("function")) {
        // defined
    } else {
       // not defined
    }
}

private void checkJSFunction() {
    loadUrl("javascript:yourJSInterfaceName.onLoaded(typeof yourFunctionName)");
}
更新:
这个代码将检查由JoToPE定义的JS函数,并通过JavaScript接口将其结果返回到java。

为什么你认为回调不是优雅和可靠的方式?因为我期望从开发平台提供直接的通信接口而不是调用JavaScript…协议-这是你6-7年前在IE上做的事情。我真的希望Android能提供更直接的工具来做一些像调用JS方法这样琐碎的事情,但到目前为止,我在搜索中运气不好,但我想可能我找错了地方-因此问题就来了。从javascript调用它:。。。看起来真的很黑,但看起来不像回调。为什么它不可靠?因为我不能确定JS回调需要多长时间才能响应。我可能会让用户等待一段时间,直到发生什么事情。我需要一种在不依赖页面完整性的情况下探测页面脚本的方法。我可以这样做:call JS test function->start timer->如果我在计时器结束之前收到回调,那么正确的JS是活动的;如果计时器滴答作响,那么它就不活动了——但这可能是最丑陋的方式。我想知道有更好的办法。。只需检查,该函数存在于JS:javascript:typeof someFunc==函数中。这是由时间决定的代码。毫无疑问,PhoneGap是一个优秀的平台。不幸的是,在我的例子中,HTML应用程序已经开发出来,几乎不可触摸。在任何情况下,JS到本机的通信在这里都不是问题,它是JS的本机通信,而不使用.loadUrl'javascript:。。。这让我很烦。请解释一下这段代码的作用以及它是如何回答这个问题的。此外,它还包含语法错误。