سؤال

سؤال قصير: ماذا تشير "Source" استثناء "، وكيف يمكنني ربطها بالسلسلة / الملف المصدر ذي الصلة؟

قصة أطول:

أقوم بتشغيل رمز JavaScript في تطبيق iPhone الأصلي من خلال [UIWebView stringByEvaluatingJavaScriptFromString:]. وبعد لمساعدة التنمية، وبعد ذلك تحقق من التعليمات البرمجية التي قدمتها المستخدم، يمكنني استخدام الوظيفة التالية لتشغيل أي رمز بأمان:

// Inside @implementation MyJS
- (NSString *)runJS:(NSString *)js {
    // Do some escaping on 'js' to make it look like a string literal.
    js = escape(js);
    NSString *result =
        [webView stringByEvaluatingJavaScriptFromString:
            [NSString stringWithFormat:@"try { JSON.stringify(eval(\"%@\")); } except (e) { JSON.stringify(e); }", js]
        ];
    return result;
}

إذا كان كل شيء على ما يرام، [MyJS runJS:js] يعمل بشكل جيد وإرجاع سلسلة JSON التي تحتوي على نتيجة تقييم العبارة الأخيرة في رمز "JS".

الآن إذا حدثت أشياء سيئة أثناء التقييم، أحصل على كائن استثناء JSONIDE. على سبيل المثال، في حالة وجود خطأ في بناء الجملة في رمز "JS"، أحصل على شيء مثل هذا:

{"رسالة": "تحليل خطأ"، "الخط": 1، "Sourceid": 26121296}

وهو بالفعل مفيد جدا لتتبع المشاكل ...

ومع ذلك، وأنا أركض سلاسل متعددة من خلال runJS:, ، أود أن أكون قادرا على تحديد أي واحد تسبب الاستثناء (نظرا لأن خطأ وقت التشغيل قد يأتي من وظيفة تم إنشاؤها في سلسلة رمز JavaScript السابقة). هذا العقار "المصدر" يبدو مثيرا للاهتمام، لكن لا يمكنني العثور على ما يشير إليه. يبدو وكأنه عنوان مؤشر (قيمة مماثلة كأشرعة إلى كائنات أخرى)، لكنها لا تتطابق مع أي من السلاسل التي مررت بها إلى المقيم. كيف يمكنني جعل هذا الرابط؟

للحصول على نقاط المكافأة: هل هناك أي وثائق متاحة حول بيئة JavaScript الخاصة ب uiWebView، مثل هذا الكائن الاستثناء؟ ال دليل صفاري على شبكة الإنترنت لطيفة، ولكن لا يذهب إلى هذا النوع من التفاصيل.

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

المحلول

الحل الأحرف الأسوأ:

داخل كل سلسلة JS يتم تقييمها، أضف بعض التعليمات البرمجية التي يلقي استثناءا، ويقوم بها، واستخراج المصنع وتكييفها بطريقة أو بأخرى ذلك بحيث runJS: يمكن أن تبقي الأسلوب سجل SourceID الذي يذهب مع أي سلسلة.

(نأمل أن يجد شخص ما طريقة أفضل وساعد في دفن هذه الإجابة القبيحة!)

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