如何使用人行横道长按 URL?

How to get the URL on long press using Crosswalk?

我注意到,在 XWalkView 中长按 link 时,什么结果也没有。我想处理 link 上的长按,就像您在 Chrome 中看到的那样(当您长按蓝色 link 时)。我不需要你知道如何创建对话框,我想知道如何拦截长按事件。

(注意这是android相关的)

我不关心为此使用 JavaScript,但它 必须 工作。

我尝试使用 onLongClickListener,但无法从中获取 URL。

这是当前代码:

//...
private static Handler handler = new Handler();
private static Runnable longPressRunnable = new Runnable() {
    @Override
    public void run() {
        Logging.logd("Long press detected");
    }
};
//...
public static final View.OnTouchListener
        mainOnTouchListener = new View.OnTouchListener() {
    //...
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        switch(motionEvent.getAction()) {
            case MotionEvent.ACTION_DOWN:
                handler.postDelayed(longPressRunnable, 1200);
                //...
                break;
            case MotionEvent.ACTION_UP:
                handler.removeCallbacks(longPressRunnable);
                //...
                break;
            case MotionEvent.ACTION_MOVE:
                //...
                handler.removeCallbacks(longPressRunnable);
                break;
            default: break;
        }
    return false;
}

请注意 XWalkView 支持 HitTestResult,所以不要告诉我使用那个作为答案。

实际上,仅使用触摸侦听器是不可能做到这一点的。我将不得不用 javascript/jQuery 来处理它,或者另辟蹊径。我将其标记为已解决,因为我会按照自己的方式行事,而这根本不会引起注意。

更新:

人行横道终于添加了。您可以在此处了解如何操作:https://github.com/xdevs23/Cornowser/blob/master/app/src/main/java/io/xdevs23/cornowser/browser/browser/xwalk/CrunchyWalkView.java#L109

代码片段(摘自上面的link):

        // Thanks to chuan.liu (XWALK-7233) for the awesome example
        setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                XWalkHitTestResult result = ((CrunchyWalkView) v).getHitTestResult();
                XWalkHitTestResult.type resultType = result.getType();
                if(result.getExtra() == null) return false;
                switch (resultType) {
                    case IMAGE_TYPE:
                        onLongPress(result.getExtra(), result.getExtra(), true);
                        break;
                    case PHONE_TYPE:
                        break;
                    default:
                        onLongPress(result.getExtra(), result.getExtra(), false);
                        break;
                }
                return true;
            }
        });