2012-08-31 10 views
16

Otrzymuję ten błąd w konsoli Safari, gdy próbuję zrobić wszystko z punktu przerwania. Raport o błędzie: https://bugs.webkit.org/show_bug.cgi?id=83267SyntaxError: Wyrażenia 'with' nie są poprawne w trybie ścisłym.

Czy ktoś ma obejście? Z przyczyn, które zakładam, są związane z tym javascript przestał działać na mojej stronie w safari.

edytuj: raport o błędzie zawiera również kroki repro.

inna edycja: Nie używam instrukcji "z". To błąd z konsoli safari.

+1

Nie dotyczy wersji Safari. "use strict"; with (this); 'w FF/Chrome produkuje" kod trybu ścisłego nie może zawierać instrukcji 'with' ". –

+11

Specyficzne dla Safari jest to, że jeśli spróbujesz ocenić cokolwiek w konsoli debuggera wewnątrz '' użyj ścisłego ";' zakresu, otrzymasz ten błąd, nawet jeśli nie widzisz słowa 'z' w dowolnym miejscu skryptu lub w tym, co wpisałeś. Wygląda na to, że Safari opakowuje wszystko, co wpiszesz w 'z' i próbuje je ocenić. Więcej informacji można znaleźć w raporcie o odnośnikach. –

+1

możliwy duplikat [Nie można sprawdzić zmiennej zakresu przy użyciu trybu ścisłego] (http://stackoverflow.com/questions/8545191/cant-inspect-scope-variable-when-using-strict-mode) –

Odpowiedz

6

Instrukcja with(obj) {} jest przestarzała i jako taka nie jest poprawna w trybie ścisłym.

Aby rozwiązać ten problem, wyłącz tryb ścisły lub zaprzestań używania instrukcji z instrukcjami!

+0

Technicznie nie używam z (safari jest wewnętrznie chyba?), ale to jest mój doctype: ... czy to "ścisłe" oznacza w tym kontekście? – quinn

+0

Nie. Tryb ścisły jest włączony przy użyciu '" use strict "' u góry pliku JS. – Eric

+3

Sądzę, że obejście problemu polegałoby na usunięciu "użycia ścisłego" wszędzie, gdzie mogę je znaleźć, dopóki Safari nie naprawi tego błędu? – quinn

2

Tryb ścisły w przepisach ECMAScript 5, np. with oświadczenie. Masz dwie możliwości:

  • wyłączyć tryb ścisły (usunąć "strict mode"; linię z pliku/funkcji) lub
  • (preferowane) unikać with wypowiedzi - są szkodliwe i całkowicie nieczytelne.

Więcej o trybie ścisłym od Johna Resig: ECMAScript 5 Strict Mode, JSON, and More.

można przeczytać w artykule, że tryb ścisły:

  • sprawia, że ​​jesteś w stanie delete zmiennej (jak w delete foo;)
  • limity wykorzystania eval,
  • dodaje pewne ograniczenia funkcji (np. dostępu caller i callee),
  • usuwa with stwierdzeń
+1

To nie jest OP za pomocą, to kod konsoli Safari. – gotofritz

Powiązane problemy