سؤال

هل من الممكن تعطيل جميع التفاعل المستخدم مع WebView، بصرف النظر عن التمرير؟ أريد أن يكون المستخدم قادرا على رؤية الصفحة (وربما اختيار الأشياء)، ولكن ليس النقر فوق ارتباطات / انقر بزر الماوس الأيمن / حقول النموذج Refresh / Focus / Focus / Trigger UI DOM الأحداث (OnClick ETC).

أرى على ذلك هذا السؤال يمكنني تعطيل النقر بزر الماوس الأيمن والاختيار، ولكن هذا لا يساعد في العناصر النموذجية والملاحة إرسال أحداث DOM.

هل كانت مفيدة؟

المحلول

يمكنك تصنيف nswindow ضوئي وتعيين الفئة الفرعية الخاصة بك كمنافذ من WebView. يمكنك بعد ذلك التحكم في الأحداث التي يتم إرسالها إلى WebView عن طريق الكشف عن أي نوع من التحكم يتأثر بحدث الماوس.

هذه القوة الغاشمة جميلة ولكنها ستعطيل أي أحداث الماوس بالكامل، بما في ذلك التقليد وغيرها:

@interface WebViewEventKillingWindow : NSWindow 
{
    IBOutlet WebView* myWebView;
}
@end

@implementation WebViewEventKillingWindow
- (void)sendEvent:(NSEvent*)event
{
    NSView* hitView;
    switch([event type])
    {
        case NSScrollWheel:
        case NSLeftMouseDown:
        case NSLeftMouseUp:
        case NSLeftMouseDragged:
        case NSMouseMoved:
        case NSRightMouseDown:
        case NSRightMouseUp:
        case NSRightMouseDragged:
            hitView = [myWebView hitTest:[event locationInWindow]];
            if([hitView isDescendantOf:myWebView] && 
                         !([hitView isKindOfClass:[NSScroller class]] || 
                             [hitView isKindOfClass:[NSScrollView class]]))
            {
                return;
            }
            break;
        default:
            break;
    }
    [super sendEvent:event];
}
@end

نصائح أخرى

سيكون أحد الخيارات (ليس الأفضل حقا ...) هو التفاف WebView داخل خدمة التمرير التي تقوم بإنشائها بنفسك، ثم تعطيل جميع التفاعل من المستخدمين مع عرض الويب بالكامل. أتصور أنك ستقوم بضبط إطار عرض الويب حتى تكون هذه الصفحة بأكملها مرئية، ثم تحقق من عرض المحتوى لعرض التمرير.

قد تكون أيضا قادرا على الفئة الفرعية WebView واعتراض النقرات لرفض إجراءات معينة، لكن ليس لدي أي تجربة مع هذا، وأتتصور أنه سيكون من الصعب التمييز بين بعض الإجراءات، مثل التحديد، من الآخرين (وخاصة القائمة السياقية ).

أتمنى أن ذلك يساعد، حظا طيبا!

ربما يمكنك القيام بذلك عبر JavaScript (تكرر من خلال جميع الروابط أو النماذج وغيرها) على الصفحة وإلغاء تنشيطها باستخدام - [UiWebView Stringbyevaluatuerjavascriptfromstring:].

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top