单击未注册的事件

时间:2013-02-05 13:25:33

标签: javascript android jquery html webkit

这是Android应用的主屏幕。一切都在WebView中呈现

当我点击左下角的按钮时,此叠加层会打开,其内容会动态添加到其中

当我点击其中一个图标时,它应该被添加到左侧的栏中。它确实如此

当我点击另一个图标时,根本没有任何事情发生。它应该调用的函数不会运行(我通过在其开头放置一个alert ()来检查。)

当我关闭叠加层(左上角的按钮),再次打开它(左下角)时,我可以添加另一个图标。但同样,在覆盖关闭并再次打开之前,下一个事件不会触发。

我不知道修复会有多容易,因为我不确定每个人是否都会遇到这个问题。我(在运行Android 4.0.4的三星GT-P6200上)做的。其他人也向我抱怨过这件事。但是,在SDK中包含的Android模拟器中,Android 4.1和4.1似乎没有出现这种情况。这似乎是一个4.0问题。

叠加层中的图标如下所示; <div class="appLauncher" onClick="launchApp (' + i + ')"><img src="data:image/png;base64,' + base64 + '" alt="[~]" /><br /><span>' + label + '</span></div>

如果它有任何区别,我会使用jQuery来处理DOM。

function launchApp (i)
{
    // Putting an alert () here indicates that the function doesn't get called, because no alert box appears on the screen //
    try
    {
        if (! launcherEdit)
        {
            android.launchAppFromList (i);
        }
        else
        {
            addAppToLauncherFromList (i); // This is what should happen //
        }
    }
    catch (ex)
    {
        handleException (ex);
    }
}

应用程序本身可以在这里找到; https://play.google.com/store/apps/details?id=be.robinj.ubuntu
它的源代码可以在这里找到; http://bazaar.launchpad.net/~robinj/be.robinj.ubuntu/trunk/files
这是Javascript文件; http://bazaar.launchpad.net/~robinj/be.robinj.ubuntu/trunk/view/head:/assets/script.js


请取悦,请不要将此作为“完全重复的”关闭,而不要正确理解实际问题是什么,就像以前发生过很多次一样。


这种血腥的混乱只出现在Android 4.0.4及更低版本(或该版本号周围的某处)。它只是点击完全忽略的appLaunchers。


我开始在这里看到某种连接......在将项目添加到左侧栏中的jQuery动画播放后,它总是开始失败。这开始看起来像一个重绘问题......


不确定这是否相关,但看到它在我的控制台中弹出......

02-12 14:30:22.650: E/dalvikvm(3936): JNI ERROR (app bug): attempt to use stale global reference 0xe
02-12 14:30:22.650: E/dalvikvm(3936): VM aborting
02-12 14:30:22.650: A/libc(3936): Fatal signal 11 (SIGSEGV) at 0xdeadd00d (code=1)

4 个答案:

答案 0 :(得分:6)

如果您使用jQuery而不是更好地使用“ bind ”事件来绑定您的点击事件。

例如:

    <div class="appLauncher" data-id= ' + i + '">
<img src="data:image/png;base64,' + base64 + '" alt="[~]" /><br /><span>' + label + '</span></div>

并且使用的是javascript文件:

$(".appLauncher").bind("click",function(){
   var i=$(this)attr("data-id");
   launchApp(i);
});

尝试并告诉我它是否对您有所帮助:)

答案 1 :(得分:2)

不是一个javascript人,但我知道Android明确区分了“一次性”触发器和可重用触发器(PendingIntents)。是否有可能以某种方式实例化一个关于.appLaunch的行为?

答案 2 :(得分:2)

我想你被issue 19827

击中了

在这种情况下,请尝试添加对preventDefault(未测试)

的调用
$(".appLauncher").bind("click", function(e) {
   e.preventDefault();
   var i = $(this)attr("data-id");
   launchApp(i);
});

答案 3 :(得分:1)

我看了http://bazaar.launchpad.net/~robinj/be.robinj.ubuntu/trunk/view/head:/assets/script.js

您已在脚本文件中设置“var scrollable = Array()”。不应该是新的Array()或只是普通的[]

试试这是否与您的JNI错误(应用程序错误)有关:尝试使用陈旧的全局引用0xe