Angular.js: (iOS 8 GM iPhone5C) TypeError: Mencoba untuk menetapkan ke properti hanya-baca

Dibuat pada 17 Sep 2014  ·  163Komentar  ·  Sumber: angular/angular.js

Saya menggunakan di iOS 8 GM (iPhone5C).
Dengan perangkat ini, saya mendapatkan kesalahan ini di baris ini (https://github.com/angular/angular.js/blob/master/src/ng/rootScope.js#L216)
Namun pada iOS 8 GM (iPhone5S) dan iOS 7.x (iPhone5C, iPhone5S), kesalahan ini tidak terjadi.

Untuk mengatasi kesalahan ini, saya menulis ulang kode sebagai berikut:

$new: function(isolate) {
        var child;

        if (isolate) {
          child = new Scope();
          child.$root = this.$root;
          // ensure that there is just one async queue per $rootScope and its children
          child.$$asyncQueue = this.$$asyncQueue;
          child.$$postDigestQueue = this.$$postDigestQueue;
        } else {
          // Only create a child scope class if somebody asks for one,
          // but cache it to allow the VM to optimize lookups.
          if (!this.$$ChildScope) {
            this.$$ChildScope = function ChildScope() {
              this['$$watchers'] = this['$$nextSibling'] =
                  this['$$childHead'] = this['$$childTail'] = null;
              this['$$listeners'] = {};
              this['$$listenerCount'] = {};
              this['$id'] = nextUid();
              this['$$ChildScope'] = null;
            };
            this.$$ChildScope.prototype = this;
          }
          child = new this.$$ChildScope();
        }
        child['this'] = child;
        child['$parent'] = this;
        child['$$prevSibling'] = this.$$childTail;
        if (this.$$childHead) {
          this.$$childTail.$$nextSibling = child;
          this.$$childTail = child;
        } else {
          this.$$childHead = this.$$childTail = child;
        }
        return child;
      },

Situasinya telah membaik, tetapi saya tidak mengerti alasannya ...

Lots of comments iOS more info bug

Semua 163 komentar

Versi sudut mana yang Anda uji? Apakah itu muncul hanya dengan memasukkan sudut atau dalam keadaan tertentu (kode aplikasi Anda)?

Saya menguji AngularJS v1.2.25.

Kode aplikasi saya ada di bawah.

template halaman

...
<card-item-list ng-repeat="card in cards track by $index" data-card="card"></card-item-list>

petunjuk card-item-list

...
var cardItemList = function() {
    var link = function(scope) {};
    return {
      restrict: 'E',
      replace: true,
      templateUrl: 'templates/card/directives/list-item.html',
      scope: {
        card: '=',
      },
      link: link
    };
  };
  cardItemList.$inject = [];
...
<div class="card--list__item">
  <div ng-class="{'card--list__item_state_check': card.isSelect}">
    <card-thumb data-card="card"></card-thumb>
  </div>
  <p class="card--list__item__detail fs_xxs">
    <span ng-if="card.parameter.attack > 0">{{card.parameter.attack}}<br>&nbsp</span>
    <span ng-if="card.parameter.defense > 0">{{card.parameter.defense}}<br>{{card.parameter.speed}}</span>
  </p>
</div>

petunjuk jempol kartu

...
var cardThumb = function() {
    return {
      restrict: 'E',
      replace: true,
      transclude: true,
      templateUrl: ''templates/card/directives/card-thumb.html',
      scope: {
        card: '=',
        opts: '=?'
      },
      link: function(scope, element){
      }
    };
  };
 cardThumb.$inject = [];
...
<figure class="thumb thumb_type_1">
  <img class="thumb__img" ng-src="{{card.image_path}}"  ng-if="card.master_id">
  <figcaption class="thumb__caption" ng-transclude></figcaption>
</figure>

@christianv dapatkah Anda membuat http://plnkr.co/ atau http://jsbin.com/ untuk mereproduksi ini?

Saya akan melihat apakah saya dapat melakukan repro ini di ipad atau iphone 6 saya (tetapi, dari apa yang Anda katakan, sepertinya saya mungkin tidak dapat :()

@caitp Saya rasa Anda bermaksud memberi tahu orang lain.

ya maksud saya @HAKASHUN , maaf

hapus 'gunakan ketat' dan coba

kami mendapatkan masalah yang sama, dan kode @HAKASHUN memperbaiki masalah tersebut untuk kami

Kami mendapatkan masalah yang sama.

Aku diterapkan kode @HAKASHUN 's untuk v1.2.26

https://github.com/shunjikonishi/angular.js/commit/b91f34103974047708145e971506f354f804c17c

Saat saya menyertakan angular.js, itu berfungsi dengan baik.
Tetapi dengan angular.min.js, itu tidak berhasil.

Saya berharap dapat memperbaiki masalah ini dengan versi normal dan versi mini.

Kami juga mengalami kesalahan ini dengan beberapa iPad yang berbeda, semuanya menjalankan iOS 8. Saya bisa mendapatkan nomor model yang tepat jika ada yang tertarik. Kami telah mencoba membangun dengan versi Angular: 1.2.24, 1.3.0, dan 1.3.1

Perbaikan @HAKASHUN setidaknya telah berfungsi di build debug (tidak dikecilkan).

@shunjikonishi ini hanya tebakan (saya berurusan dengan masalah yang sama) tetapi apakah penambang Anda mungkin melakukan sesuatu seperti memaksa notasi titik? Itu akan secara efektif membatalkan perbaikan ini. Saya sudah mencoba satu minifikasi dengan uglify (2.4) dan itu merusak perbaikan, dan sekarang saya mencari tebakan saya. Mungkin saya bisa meminta uglify untuk menghormati notasi titik, atau mungkin saya salah.

_memperbarui_

Apakah ada orang lain yang menggunakan $ route?

Juga @shunjikonishi dalam kasus saya, uglifyjs memaksa notasi titik, secara efektif membatalkan perbaikan. Jika Anda menggunakan grunt / uglify, contohnya seperti ini: uglify: {options: {properties: false}}

bisakah Anda memperbanyak ini dengan cepat? Saya ingin melihatnya dengan ponsel saya

@ Caitp Saya akan melihat apa yang bisa saya lakukan. Aku punya beberapa pekerjaan tak terduga yang harus diurus, tapi ini penting, jadi mudah-mudahan aku akan punya alat pemukul pada sore hari.

_memperbarui_

@caitp Saya membuat plunker untuk mencoba mereproduksi masalah ini, dan gagal.

Jika ada yang tertarik untuk melihat upaya plunker saya untuk mereproduksi, ada di sini: http://plnkr.co/edit/EPsxhO1OsD5MmnUyl50t?p=preview Saya mulai dengan satu klik sederhana memperbarui $ scope, kemudian mencoba $ route changes (yaitu di mana saya dapat mereproduksi secara konsisten dalam aplikasi saya), lalu mencoba mengulang, dan mengulang dalam sebuah ng-if.

Saya akan meluangkan lebih banyak waktu untuk ini nanti.

@ bennett000 Terima kasih atas

Saya baru saja menggunakan output dari perintah paket grunt.

Sekarang, saya menyertakan tugas sudut uglify dalam proyek saya. Ini bekerja dengan baik.

Ada satu koreksi.
Dengan grunt-contrib-uglify, format opsinya seperti ini.

uglify: {
    options: { 
        compress: {
            properties: false 
        }
    }
}

Ini juga tampaknya mempengaruhi Angular v1.3.0; kami telah melihatnya di perangkat iOS8 di kantor kami, tetapi halaman di atasnya mengalami kesalahan secara tidak konsisten (sesuatu yang kami teliti).

Menerapkan patch @shunjikonishi menyebabkan halaman tidak rusak dalam kondisi tersebut, tetapi juga menyebabkan "tidak ditentukan" muncul di halaman di tempat yang tidak semestinya, dan tidak dihapus.

Mungkin bukan kumpulan detail yang paling berguna, tetapi ini adalah hasil dari penyelidikan awal. Kita bisa menggali lebih dalam; hanya ingin mencatat bahwa v1.3.0 juga terpengaruh.

hai teman-teman, kami masih menunggu reproduksi =)

(jadi berikan satu)

Benar- benar

Yang aneh adalah saya dapat mereproduksi ini secara konsisten dalam aplikasi saya, seperti yang dapat dilakukan orang lain; namun saya gagal untuk mereproduksi di plunker. Saya senang untuk terus mereproduksi ini sebagai contoh, tetapi saya sangat ingin mendapatkan lebih banyak detail dari orang lain yang memiliki masalah ini.

Dalam kasus kami:

  • Aplikasi web "disimpan" ke layar beranda iOS
  • Aplikasi web dijalankan dari layar beranda iOS
  • Aplikasi web berhenti setelah beberapa panggilan $ location.path ()

Nomor model iDevice diketahui terpengaruh:

  • MD528C / A
  • MD516C / A
  • MF432C / A

Saya bertanya-tanya apakah ada perbedaan jika aplikasi dijalankan dari layar beranda iOS, dibandingkan dengan dijalankan di Safari iOS, atau di WebView, atau WKView; ini telah terjadi di versi iOS yang lebih lama.

Saya akan bekerja lebih banyak pada plunker, dan saya juga akan mengambil kode plunker, dan memutarnya menjadi aplikasi mandiri sehingga saya dapat melihat apakah saya dapat mereproduksinya saat "disimpan" ke layar beranda iOS.

Sekali lagi, informasi tambahan yang dimiliki orang lain tentang masalah mereka akan sangat membantu.

_memperbarui_

Menjatuhkan hal-hal plunkr yang telah saya lakukan ke aplikasi web homescreen iOS yang lengkap tampaknya tidak memiliki efek tambahan.

Apakah ada orang lain yang menggunakan gerakan khusus, atau melakukan sesuatu yang khusus untuk menghindari hal-hal seperti pengguliran pantulan iOS?

Menghapus 'use strict'; memecahkan masalah untuk saya (iPhone 5C iOS 8.1).

Selama beberapa minggu terakhir saya terus gagal mereproduksi masalah ini dalam lingkungan yang terkendali, seperti plunkr. Selain itu, solusi lain, termasuk menghapus 'gunakan ketat' tidak membantu saya. Jelas tanpa reproduksi terkontrol dari masalah ini, tidak ada tempat untuk mulai memecahkan masalah ini. Namun, saya sadar bahwa Angular mengirimkan paket pengujian unitnya sendiri; bagaimana pengujian tersebut dilakukan di perangkat saya?

  • Angular.js komit: 9a616eade4386341e51f993fe8824840ea96a8e9
  • Di Ubuntu 12.04, menjalankan Chromium 37.0.2062 _semua tes lulus_
  • Di iOS 7.1.2, menjalankan Safari seluler 7.0.0, (Model MF432C / A) _semua tes lulus_
  • Pada iOS 8.1.1, menjalankan mobile Safari 8.0.0, (Model MD528C / A) satu tes gagal

Mobile Safari 8.0.0 (iOS 8.1.1) private mocks createMockStyleSheet should allow custom styles to be created and removed when the stylesheet is destroyed FAILED Expected '0px' to be '2px'. ~/Workspaces/angular.js/test/helpers/privateMocksSpec.js:23:47

Dugaan saya adalah bahwa tes yang gagal ini tidak ada hubungannya.

Sekali lagi, siapa pun yang memiliki saran tentang cara mereproduksi kesalahan hanya baca iOS 8 akan sangat membantu. Saya tahu _other_ frameworks memiliki masalah _similar_ dengan penetapan properti hanya baca di iOS8.x tetapi mereka tidak membantu saya mereproduksi. Berikut adalah tautan yang mereferensikan masalah _similar_ yang dialami beberapa orang lain

Langkah lain yang saya ambil untuk mengurangi masalah ini adalah menyisir seluruh sumber kami, dan sumber pustaka _every_ kami gunakan untuk menemukan apa pun yang mungkin menyetel properti hanya baca. Ini termasuk usaha untuk:

  • Object.create ()
  • membekukan
  • dapat ditulis
  • dapat dikonfigurasi
  • defineProperty

Apakah ada hal lain yang mungkin membuat JavaScript menampilkan kesalahan jenis hanya baca? Tidak bisa mereproduksi ini tidak membantu kewarasan saya.

Kami juga mengalami ini.
Kami dapat mereproduksi masalah hanya pada perangkat yang sebenarnya (dalam kasus kami IPhone 5C) dengan versi IOS sebelum 8.1 (kami menguji pada 8.0.2 dan masalah berulang terus menerus).

Ini adalah masalah yang cukup serius, adakah solusi yang diketahui?

(Kami berada di Angular 1.3.6, diperbarui hari ini, masalah masih berlanjut)

@ m3kka apakah Anda berhasil mengisolasi masalah? Akan sangat sulit untuk melanjutkan yang satu ini tanpa mempersempitnya terlebih dahulu.

Menghabiskan sore hari mencari cara untuk mereproduksi kesalahan dalam lingkungan yang terkendali tetapi sayangnya masih belum ada solusi.

Saya telah memperluas sedikit solusi dari @HAKASHUN jadi jika ada yang membutuhkan fast - notSoGood - perbaiki ini yang saya lakukan.

_AngularJS_ ver.

RootScope
https://github.com/angular/angular.js/blob/master/src/ng/rootScope.js#L208
Dari:

          if (!this.$$ChildScope) {
            this.$$ChildScope = function ChildScope() {
              this.$$watchers = this.$$nextSibling =
                  this.$$childHead = this.$$childTail = null;
              this.$$listeners = {};
              this.$$listenerCount = {};
              this.$id = nextUid();
              this.$$ChildScope = null;
            };

Untuk:

          if (!this['$$ChildScope']) {
            this['$$ChildScope'] = function ChildScope() {
              this['$$watchers'] = this['$$nextSibling'] =
                  this['$$childHead'] = this['$$childTail'] = null;
              this['$$listeners'] = {};
              this['$$listenerCount'] = {};
              this['$id'] = nextUid();
              this['$$ChildScope'] = null;
            };

https://github.com/angular/angular.js/blob/master/src/ng/rootScope.js#L221
Dari:

        child.$parent = parent;
        child.$$prevSibling = parent.$$childTail;

Untuk:

        child['$parent'] = parent;
        child['$$prevSibling'] = parent.$$childTail;

Menyusun
https://github.com/angular/angular.js/blob/master/src/ng/compile.js#L1375
Dari:

transcludedScope.$$transcluded = true;

Untuk

transcludedScope['$$transcluded'] = true;

Sampai sekarang saya tidak dapat membantu Anda dengan lebih banyak informasi, akan terus menyelidiki masalah tersebut.

Saya menemukan yang ini. iOS mati di baris ini:

              this.$$watchers = this.$$nextSibling =
                  this.$$childHead = this.$$childTail = null;

Ketika saya memecah ini menjadi pernyataan terpisah, saya menemukan kesalahan itu disebabkan ketika this.$$watchers ditugaskan terlebih dahulu. Berikut ini bekerja dengan benar:

              this.$$childTail = null;
              this.$$childHead = null;
              this.$$nextSibling = null;
              this.$$watchers = null;

Saya menduga iOS menjalankan urutan tugas secara tidak benar, menyebabkan kesalahan. Saya tidak tahu di mana lagi perbedaan sintaks ini akan menyebabkan kesalahan, tetapi saya menduga ini memiliki implikasi yang jauh.

@Wasmoo wow, kedengarannya aneh. Apakah Anda dapat mengisolasi benda ini dalam contoh minimal, idealnya di plunker? Jika demikian, ini pasti akan menjadi masalah di sisi browser.

@ pkozlowski-opensource Sayangnya tidak ada. Saya baru saja mengalami kesalahan pada proyek yang sedang saya kerjakan dan saya tidak tahu sumbernya (jQuery melempar sesuatu ke Angular). Seperti dalam proyek saya, Anda harus mengklik hal yang benar dengan urutan yang benar agar kesalahan terjadi, tetapi perubahan ini dan hanya ini yang memperbaiki masalah saya.

Semoga orang lain yang mendapatkan kesalahan dapat mengonfirmasi perbaikannya.

Kami mengalami masalah ini di halaman 'berat' yang dipenuhi dengan beberapa cakupan dan template, menyederhanakannya dengan plunker tampaknya sangat sulit: /

Saya akan mencoba memperbaiki @Wasmoo , akan memposting kembali hasilnya di basis kode kami dalam beberapa menit.

Tidak @Wasmoo tidak menyelesaikan masalah di basis kode kami.

:-( Kesedihan!
Saya juga mengonfirmasi bahwa iOS melakukan tugas dalam sintaks ini dengan urutan yang benar:

    j.a = j.b = j.c = 0;

setara dengan

    j.c = 0;
    j.b = 0;
    j.a = 0;

Jadi itu membuang teori itu, meskipun saya tidak bisa menjelaskan mengapa perbaikan saya berhasil untuk saya.

Untuk apa nilainya, proyek saya masih rusak - perbaikan saya hanya memindahkan bug sehingga gagal dengan cara yang sama di beberapa titik lain.

@Wasmoo dengan menerapkan solusi saya, Anda harus dapat menghilangkan masalah (tetap Anda harus mempertahankan untuk versi sudut berikutnya)

@ m3kka Bekerja seperti sulap!

@ m3kka, apakah itu berarti Safari di iOS tidak menyukai akses putus-putus ke properti dengan $ ? Hmm, pasti ada hal tambahan yang terjadi ...

Berikut adalah patch monyet yang saya buat untuk tidak perlu memodifikasi kode sumber angular.js secara langsung. Saya telah menggunakannya selama beberapa minggu terakhir tanpa masalah lagi. Itu didasarkan pada sudut 1.3.3.

https://gist.github.com/jhunken/767cdf62ecc9f31c56da

Sayangnya, saya juga belum dapat mereproduksi masalah ini dengan contoh minimal.

Jika seseorang mencari solusi tanpa harus menggunakan versi Angular yang ditambal, Anda dapat mencoba yang berikut ini.

Saya memiliki beberapa pengontrol status bersarang untuk ui-router dan melihat kesalahan tersebut dipicu oleh beberapa baris yang mengakses variabel pada lingkup induk. Dalam upaya untuk mendapatkan akses ke variabel-variabel ini tanpa melalui ruang lingkup saya mengatur pengontrol saya menggunakan sintaks Controller as . Ini membuatnya jadi saya dapat mengakses variabel secara langsung tanpa harus melintasi cakupan.

Tidak yakin apakah ini akan berhasil untuk semua orang tetapi aplikasi saya tidak lagi menampilkan kesalahan.

@ pkozlowski-opensource Saya pikir IOS entah bagaimana mengacaukan properti readonly pada objek js. Rupanya mengakses elemen dengan 'notasi kunci' (tidak dapat mengingat nama sebenarnya) mengabaikan kekacauan ini.

Juga tampaknya Angular bukan satu-satunya yang terpengaruh oleh masalah ini - http://craigsworks.com/projects/forums/showthread.php?tid=3649

@jhunken Anda membuat saya

Saya memiliki masalah yang sama. Solusi yang disarankan tampaknya menyelesaikannya. Saya menggunakan dekorator @jhunken .

Pertanyaan noob: apa arti masalah ini dalam tonggak api penyucian? Kedengarannya tidak bagus.

Saya masih belum mereproduksi ini, dan saya telah membuang banyak waktu untuk mencoba. Namun saya senang untuk mengatakan bahwa @jhunken 's monkey patch yang _seems_ telah memecahkan masalah saya untuk saat ini. Saya berharap untuk mencari tahu _why_ ini berfungsi karena saya menyia-nyiakan begitu banyak waktu untuk melangkah melalui proses ini berulang-ulang tanpa mendapatkan hasil apa pun.

Menambahkan beberapa detail yang mungkin tidak berguna dengan sendirinya, tetapi ... Pada iOS 8.1.2 iPad 2 dan mini saya telah melihat "TypeError: Mencoba untuk menetapkan ke properti hanya-baca". Ini adalah aplikasi besar, sangat sulit untuk masuk ke plunkr.

Kami memiliki masalah yang muncul secara konsisten menggunakan Angular 1.3.7 (kami telah menghapus 'gunakan ketat' dari file min untuk v1.3 untuk memperbaiki masalah yang sama ini, tetapi tidak menghapusnya setelah peningkatan). Terakhir kali kesalahan muncul di tempat berbeda di aplikasi dan kurang konsisten. Kali ini kami memiliki langkah-langkah repro untuk melakukannya sesuai permintaan. Menghapus 'gunakan ketat' dari angular.min.js memperbaiki masalah. Langkah terakhir sebelum kesalahan melibatkan perubahan rute (kami menggunakan router standar: ngRoute). Dalam kasus kami, ini menghasilkan kisi data tanpa data dan pesan tidak diterjemahkan (menggunakan direktif terjemahan dari pascalprecht.translate). Mengalihkan rute lagi menggunakan dropdown yang sama atau menyegarkan akan membuat halaman berfungsi kembali.

Saya yakin ini adalah bug safari seluler karena kami tidak melihatnya di browser lain.

Tampaknya ini adalah bug iOS 8 - http://stackoverflow.com/a/27401601

Di log kesalahan bugsnag untuk aplikasi saya, saya juga melihat itu hanya di Safari seluler dengan iOS 8.0 dan 8.1

Di bawah ini adalah jejak tumpukan untuk sudut 1.2.28. Masalah yang sama ada juga untuk 1.2.24.

TypeError Attempted to assign to readonly property.
    angular.js:12188:37 $$childScopeClass
    angular.js:12198:8 prototype
    angular.js:6161:29 
    angular.js:6773:35 controllersBoundTransclude
    angular.js:21409:16 link
    angular.js:6752:19 nodeLinkFn
    angular.js:6146:23 compositeLinkFn
    angular.js:6746:35 nodeLinkFn
    angular.js:6954:36 
    angular.js:8171:13 
    angular.js:11682:81 wrappedCallback
    angular.js:11768:34 
    angular.js:12811:28 prototype
    angular.js:12623:36 prototype
    angular.js:12915:12 prototype
    angular.js:19264:29 
    angular.js:2853:14 
    angular.js:325:22 forEach
    angular.js:2852:12 eventHandler

Apakah ada perbaikan lain untuk ini selain menghapus 'gunakan ketat'? Saya ingin CDN bersudut dan ini akan menonaktifkannya ...

edit: menggunakan karya inti. maaf soal itu

Penambalan monyet bekerja untuk saya juga, Jelas bukan solusi yang baik, dan ini adalah bug yang merusak sudut dalam produksi. Sepertinya webkit ios8 sangat tidak menyukai penugasan variabel. $$

Untuk beberapa info, saya harus menambal compile.js karena fase kompilasi arahan saya sedang macet.

transcludedScope['$$transcluded'] = true;

Membuat beberapa perubahan dari notasi titik ke notasi tanda kurung dengan menambal monyet seperti @jhunken juga berhasil untuk saya. Masalah yang sangat aneh.

Masih belum ada kabar tentang solusi resmi?

Menghapus penggunaan yang ketat melakukannya untuk saya. Masih menunggu solusi resmi.

@rjbernaldo Untuk memperjelas, apakah Anda menghapus 'use strict' dari angular.js, file sumber Anda sendiri, atau keduanya?

@hamstu Saya menghapusnya dari angular.js saja.

Menghapus 'use strict'; memperbaiki masalah di pihak saya. Saya cukup yakin Apple mencoba mematikan aplikasi web dengan kerusakan seperti ini. =]

Menghapus 'use strict'; memang menghentikan crash tetapi tampaknya telah menyebabkan masalah lain: sekarang aplikasi saya tampaknya macet dan bukannya mogok, dan tab di Safari menjadi sama sekali tidak responsif. Ini bahkan terjadi di simulator iOS, dan proses simulator mulai menggunakan 200% CPU di Mac saya.

Apakah ini terjadi pada orang lain?

dapatkah Anda memposting jejak tumpukan kerusakan, bersama dengan versi dari semua perpustakaan yang Anda gunakan? itu akan sangat membantu

oh tunggu dulu, saya mengerti apa itu ... wow saya rasa itu bukan perilaku yang benar di JSC, tetapi hanya untuk memeriksa ...

Saya belum dapat mereproduksi ini di iphone, ipad, atau simulator ios yang pernah saya coba. Menurut saya masalahnya adalah properti prototype salah didefinisikan sebagai tidak dapat ditulis di JSC, yang akan menjadi bug (dan, akan menjelaskan mengapa tidak dapat direproduksi lagi jika mereka telah memperbaikinya). Jika bukan itu bug yang terkena, maka berikan reproduksinya untuk kami.

Bagi saya sepertinya bug yang membuat masalah ini adalah https://bugs.webkit.org/show_bug.cgi?id=138038 (diposting di jawaban sebelumnya oleh @edzis)

@ m3kka kami tidak menggunakan O.create di mana pun di 1.2.x.

Dalam situasi kami, masalah ini dimulai ketika kami pindah ke cabang 1.3.x, di mana kode sumber saya dapat menemukan beberapa contoh Object.create ()

Apakah saya benar-benar keluar jalur?

Laporan bug asli (dan sebagian besar komentar) menunjukkan bahwa ini mempengaruhi versi 1.2.x

Bagaimanapun, siapa pun yang mengalami masalah ini, harap berikan reproduksi: <

Inilah yang saya dapatkan dari konsol Safari dari simulator iOS di iPhone 5 yang menjalankan iOS 8.0. Ini dengan AngularJS v1.3.13.

[Error] Error: Attempted to assign to readonly property.
ChildScope<strong i="6">@http</strong>://localhost:9000/bower_components/angular/angular.js:13682:42
$new<strong i="7">@http</strong>://localhost:9000/bower_components/angular/angular.js:13690:40
boundTranscludeFn<strong i="8">@http</strong>://localhost:9000/bower_components/angular/angular.js:7092:40
controllersBoundTransclude<strong i="9">@http</strong>://localhost:9000/bower_components/angular/angular.js:7756:35
ngRepeatAction<strong i="10">@http</strong>://localhost:9000/bower_components/angular/angular.js:24502:26
$watchCollectionAction<strong i="11">@http</strong>://localhost:9000/bower_components/angular/angular.js:14110:21
$digest<strong i="12">@http</strong>://localhost:9000/bower_components/angular/angular.js:14243:31
$apply<strong i="13">@http</strong>://localhost:9000/bower_components/angular/angular.js:14506:31
done<strong i="14">@http</strong>://localhost:9000/bower_components/angular/angular.js:9659:53
completeRequest<strong i="15">@http</strong>://localhost:9000/bower_components/angular/angular.js:9849:15
requestLoaded<strong i="16">@http</strong>://localhost:9000/bower_components/angular/angular.js:9790:24
  (anonymous function) (angular.js, line 11607)
  (anonymous function) (angular.js, line 8557)
  $digest (angular.js, line 14261)
  $apply (angular.js, line 14506)
  done (angular.js, line 9659)
  completeRequest (angular.js, line 9849)
  requestLoaded (angular.js, line 9790)

@pascalc bagus, sekarang berikan reproduksi =)

Menggunakan AngularJS v1.2.22
Kesalahan: Mencoba menetapkan ke properti hanya baca.
$$ childScopeClass @ http : //XXX/bower_components/angular/angular.js: 12037: 23
$ baru @ http : //12wbt-frontend.dev/bower_components/angular/angular.js: 12045: 45
compositeLinkFn @ http : //XXX/bower_components/angular/angular.js: 6067: 38
compositeLinkFn @ http : //XXX/bower_components/angular/angular.js: 6089: 24
compositeLinkFn @ http : //XXX/bower_components/angular/angular.js: 6089: 24
compositeLinkFn @ http : //XXX/bower_components/angular/angular.js: 6089: 24
nodeLinkFn @ http : //XXX/bower_components/angular/angular.js: 6686: 35
compositeLinkFn @ http : //XXX/bower_components/angular/angular.js: 6086: 23
publicLinkFn @ http : //XXX/bower_components/angular/angular.js: 5982: 45
http: //XXX/assets/scripts/app.js : 51874: 49

dan kode di app.js adalah '$ compile (element.contents ()) ($ scope);' . Kesalahan direproduksi pada safari Ipad dengan IOS Simulator. Mengomentari 'ketat pengguna' juga memperbaiki kesalahan.

@ chriswu14 tolong berikan reproduksi lagi, terima kasih!

Melihat masalahnya juga. Meskipun demikian, tidak yakin seberapa berhasil atau bahkan berguna permintaan 'reproduksi', mengingat fakta bahwa fenomena ini tampaknya _sangat_ spesifik untuk pengaturan tertentu. Misalnya. Saya hanya mengalami ini dengan ui-router , child ui-state & views DAN simulator iphone 5 iOS .

Hapus salah satu variabel dan itu berfungsi dengan baik, dengan masalah kuncinya tampaknya adalah sim iPhone5.

IPhone 4S dan 5S bekerja seperti pesona dan begitu juga dengan iPad2 / retina sim.

Saya setuju. Lebih dari satu orang mencoba mereproduksi ini dalam lingkungan yang terkendali tidak berhasil (termasuk saya), saya kira itu tidak akan diperbaiki dalam waktu dekat.

Saya mengalami masalah yang sama di iPhone 6 juga, berkembang dengan Ionic
kerangka

Pada hari Selasa, 17 Maret 2015 jam 19.50, Marco Visintin [email protected]
menulis:

Saya setuju. Lebih dari satu orang mencoba mereproduksi ini secara terkontrol
lingkungan tidak berhasil (termasuk saya), saya kira itu tidak akan diperbaiki kapan saja
segera.

-
Balas email ini secara langsung atau lihat di GitHub
https://github.com/angular/angular.js/issues/9128#issuecomment -82496015.

Saya juga mengalami masalah yang sama dengan iphone 6 simulator yang menjalankan iOS 8.2

Saya mengalami masalah yang sama di iPad saya (generasi ke-3) yang menjalankan iOS 8.2 (12D508), dengan pencatatan jarak jauh. Dan masalahnya hilang ketika saya menghapus "gunakan ketat" dari kode sumber angular.js. Adakah yang sudah memberi tahu Apple tentang ini?

Tanpa reproduksi, kemungkinan besar masalah ini tidak dapat dianggap serius oleh siapa pun, dan mereka (relatif) sedikit dari kita yang terpengaruh oleh masalah tersebut sebagian besar telah menemukan solusi alternatif. Seringkali saya menyisihkan waktu untuk mencoba menggandakan, dan saya tidak mendapatkan apa-apa.

Saya mengalami masalah ini di semua versi iOS> = 8.0.0, tetapi hanya pada beberapa model. Saya telah mencoba beberapa versi Angular di garis 1.2.x, dan 1.3.x, hingga 1.3.14 - Saya tidak mengalami masalah dalam pengujian unit saya, atau pengujian komponen e2e - hanya dalam satu aplikasi tertentu, biasanya pada perubahan rute, dan hanya setelah aplikasi berjalan beberapa saat.

solusi jhunken telah bekerja dengan sangat baik untuk saya. Menggunakannya _unminified_ Saya tidak memiliki masalah sama sekali. Namun minifikasi dengan Uglify, dan Closure Compiler mematahkan perbaikan. Saya belum punya waktu untuk mencoba mengeluarkan dekorator dari proses minifikasi, dan mengecatnya ...

hanya fwiw, tidak apa-apa jika reproduksinya tidak "minimal", meskipun lebih sederhana lebih baik --- Anda dapat menautkan ke aplikasi yang terpengaruh (idealnya dengan persyaratan backend minimal, jadi lebih mudah bagi kami untuk membuat repro dengan)

@ Caitp Saya melihat ini secara konsisten di sini . Jika Anda mengklik "salib" di kanan atas layar, saya mendapatkan kesalahan yang dijelaskan (dan bagian utama layar menjadi putih - ini harus menavigasi ke halaman lain). Perhatikan bahwa itu tidak terjadi di simulator iOS, tetapi menggunakan iOS 8.2 di iPhone 5 saya dapat mereproduksi setiap saat.

@iainbeeston Saya tidak dapat

Saya telah membersihkan cache dan itu masih terjadi di iPhone 5 saya.

Saya juga baru saja menguji pada iPhone 6 (juga iOS 8.2) dan seperti yang Anda katakan, ini berfungsi dengan benar di sana. Jadi sepertinya khusus untuk iPhone 5x (tidak yakin tentang iPhone 4x).

Saya mengumpulkan kesalahan JS Angular dari situs web saya dan saya melihat kesalahan ini di iPad dan iPhone acak berdasarkan agen pengguna.

Saya telah mencoba mereproduksi ini di iPhone 5, iPad mini2, dan iPad air dan saya tidak dapat menirunya.

@iainbeeston Saya mencobanya di iPad saya tetapi saya tidak 100% yakin apa yang Anda maksud dengan cross - dapatkah saya berasumsi bahwa tata letaknya berbeda di pad?

Pokoknya mengklik beberapa hal, termasuk menu toggling, dan 'x' tidak menimbulkan kesalahan pada pad saya, IIRC model mini saya adalah MD528C / A

Mungkin itu hanya mempengaruhi iphone 5 dan sebelumnya.

Pada Rabu, 25 Mar 2015 pukul 16:35 Michael Bennett [email protected]
menulis:

@iainbeeston https://github.com/iainbeeston Saya mencobanya di iPad saya tetapi
Saya tidak 100% yakin apa yang Anda maksud dengan cross - dapatkah saya berasumsi tata letaknya
berbeda di pad?

Pokoknya mengklik beberapa hal, termasuk menu toggling, dan 'x'
tidak ada kesalahan pada pad saya, IIRC model mini saya adalah MD528C / A

-
Balas email ini secara langsung atau lihat di GitHub
https://github.com/angular/angular.js/issues/9128#issuecomment -86107019.

Saya telah meminta anggota keluarga dengan iphone 5 (tidak ada detail tambahan pada model #, tapi hei) di iOS 8.2 untuk mencobanya, dan mereka mengirim kembali tangkapan layar yang tampaknya berfungsi dengan baik. Ini sepertinya sedikit heisenbug, mungkin ada baiknya melaporkannya sebagai bug di Safari itu sendiri

Hei itu menarik. Bekerja untuk saya juga sekarang (kami telah memperbarui kode sejak itu
lalu, jadi mungkin perubahan yang tidak terkait memperbaikinya?)

Apakah ada orang lain yang memiliki situs yang dapat mereproduksi masalah tersebut dengan andal?
Pada Rabu, 25 Mar 2015 pukul 16.59, ⭐caitp⭐ [email protected] menulis:

Saya telah meminta anggota keluarga dengan iphone 5 (tidak ada rincian tambahan tentang
model #, tapi hei) di iOS 8.2 untuk mencobanya, dan mereka mengirim kembali tangkapan layar itu
tampaknya bekerja dengan baik. Ini sepertinya sedikit heisenbug, mungkin
ada baiknya melaporkannya sebagai bug di Safari itu sendiri

-
Balas email ini secara langsung atau lihat di GitHub
https://github.com/angular/angular.js/issues/9128#issuecomment -86121113.

Saya memiliki skenario yang dapat direproduksi di situs web yang saya kerjakan, tetapi saya hanya dapat membagikan detail login secara pribadi. Tolong beri saya email Anda sehingga saya dapat mengirimkan detailnya kepada Anda.

@caitp Saya masih mendapatkan masalah sebenarnya. Jika Anda pergi ke halaman yang sama seperti sebelumnya , lalu klik panah di panah kiri atas (yang memuat halaman sebelumnya), lalu panah di kanan atas (yang kembali ke halaman asli) Saya mendapatkan kesalahan cukup andal.

photo 02-04-2015 3 08 25 pm

Jika tidak segera terjadi, coba klik bolak-balik beberapa kali (cukup klik panah, tetapi bukan ikon silang). Anda dapat mengetahui kesalahan telah terjadi karena gambar tidak lagi muncul.

photo 02-04-2015 3 13 29 pm

Ini ada di iPhone 5 (A1429) , menjalankan iOS 8.2 dan mobile safari 8.0 (agen pengguna Mozilla/5.0 (iPhone; CPU iPhone OS 8_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12D508 Safari/600.1.4 )

seperti yang dijelaskan, saya tidak dapat mereproduksi ini di 3 perangkat iOS yang berbeda, atau perangkat simulator iOS mana pun.

Saya pikir Anda harus melaporkan ini sebagai bug di webkit atau menghubungi Apple. Sangat sedikit yang dapat dilakukan siapa pun jika kita tidak dapat melihat bug itu sendiri

Maaf, saya baru saja membayangkan bahwa penjelasan yang lebih mendetail akan membantu mereproduksi bug.

Apakah pantas untuk menutup masalah ini?

Menurut saya bug ini acak pada perangkat dan versi iOS. Saya memiliki beberapa perangkat dan saya tidak dapat mereproduksi kesalahan tersebut, tetapi saya tahu bahwa beberapa orang di situs web saya mengalami masalah ini karena saya melihat pesan kesalahan.

Saya akan menyarankan bahwa dalam keadaan ini, mungkin itu sesuatu tentang konfigurasi perangkat, beberapa pengaturan atau mungkin beberapa perangkat lunak lain yang telah diinstal yang menyebabkan konflik.

Ini jelas menjadi masalah bagi banyak orang. Fakta bahwa itu tidak dapat direproduksi dalam lingkungan yang terkendali menurut saya tidak menghalangi perbaikan apa pun untuk masalah yang diberikan untuk diterapkan. Sepertinya, ada tambalan monyet yang tersedia untuk memperbaiki masalah. Jika kata monkey-patch tidak menyebabkan masalah lain yang dapat diverifikasi (dalam pengujian unit, dll.) Saya tidak begitu memahami alasan di balik tidak menerapkannya dan memperbaiki masalah untuk semua orang.

Jika kata monkey-patch tidak menyebabkan masalah lain yang dapat diverifikasi (dalam pengujian unit, dll.) Saya tidak begitu memahami alasan di balik tidak menerapkannya dan memperbaiki masalah untuk semua orang.

kirim PR =)

@caitp menulis:

kirim PR =)

Saya lebih suka jika @jhunken sebagai penulis tambalan monyet tersebut bisa melakukannya. :)

@asbjornu Saya cukup beruntung mendapatkan manfaat dari patch jhunken _but_ dalam kasus penggunaan saya, patch monyet tidak berfungsi setelah minifikasi. Jika masalah saya adalah masalah yang sama dengan yang dimiliki orang lain; menerima tambalan ini belum tentu memperbaiki apa pun.

Jika saya bisa melanjutkan untuk mempublikasikan demo kami, maka kami harus dapat mereproduksi di perangkat lain. Ini mungkin tidak untuk satu bulan lagi. Ada juga kemungkinan rilis iOS 8.3 baru-baru ini telah memperbaiki masalah ini, tetapi saya belum sempat mengujinya.

Hai, @spencerwi , apakah Anda sudah tahu mengapa kata "tidak ditentukan" muncul saat menerapkan tambalan? Apakah Anda sudah menemukan solusi lain? Terima kasih

@totemika @spencerwi dari sisi kami, kami hanya menyingkirkan "tidak terdefinisi" dengan mengubah cara kami menggunakan terjemahan, mis.

itu tidak bekerja menggunakan:

<h2 translate="'GETTING_STARTED_HEADLINE"></h2>

Ini bekerja dengan:

<h2>{{ 'GETTING_STARTED_HEADLINE' | translate }}</h2>

@brauliodiez @spencerwi Itu benar-benar berhasil: +1:

@ bennett000 btw - Saya baru saja meningkatkan ke iOS 8.3 dan saya dapat mengonfirmasi bahwa saya masih mengalami masalah ini.

Untuk lebih jelasnya, saya mendapatkannya dengan atau tanpa patch monyet di iPad 4G (2012) yang menjalankan iOS 8.3 dan iOS 8.1.3. Itu tidak selalu dapat direproduksi - terkadang hanya melampirkannya ke debugger Safari yang berjalan di Mac akan memperbaikinya, tetapi di lain waktu itu masih salah saat dilampirkan (yang setidaknya memungkinkan saya untuk membaca jejak pengecualian).

Apakah Anda menggunakan terjemahan sudut?

@brauliodiez - Saya menggunakan angular-translate yes - dan angular-ui-router yang sebenarnya ada di stack trace di bawah ini.

angular#1.3.15
angular-translate#2.4.2
angular-ui-router#0.2.13
Error: Attempted to assign to readonly property.
ChildScope<strong i="9">@http</strong>://<hostname_redacted>/2/vendor/angular/angular.js:13617:34
$new<strong i="10">@http</strong>://<hostname_redacted>/2/vendor/angular/angular.js:13759:40
compositeLinkFn<strong i="11">@http</strong>://<hostname_redacted>/2/vendor/angular/angular.js:7096:38
nodeLinkFn<strong i="12">@http</strong>://<hostname_redacted>/2/vendor/angular/angular.js:7763:35
compositeLinkFn<strong i="13">@http</strong>://<hostname_redacted>/2/vendor/angular/angular.js:7117:23
compositeLinkFn<strong i="14">@http</strong>://<hostname_redacted>/2/vendor/angular/angular.js:7120:24
compositeLinkFn<strong i="15">@http</strong>://<hostname_redacted>/2/vendor/angular/angular.js:7120:24
nodeLinkFn<strong i="16">@http</strong>://<hostname_redacted>/2/vendor/angular/angular.js:7763:35
compositeLinkFn<strong i="17">@http</strong>://<hostname_redacted>/2/vendor/angular/angular.js:7117:23
compositeLinkFn<strong i="18">@http</strong>://<hostname_redacted>/2/vendor/angular/angular.js:7120:24
publicLinkFn<strong i="19">@http</strong>://<hostname_redacted>/2/vendor/angular/angular.js:6996:45
http://<hostname_redacted>/2/vendor/angular-ui-router/release/angular-ui-router.js:3905:13
invokeLinkFn<strong i="20">@http</strong>://<hostname_redacted>/2/vendor/angular/angular.js:8258:15
nodeLinkFn<strong i="21">@http</strong>://<hostname_redacted>/2/vendor/angular/angular.js:7768:23
compositeLinkFn<strong i="22">@http</strong>://<hostname_redacted>/2/vendor/angular/angular.js:7117:23
publicLinkFn<strong i="23">@http</strong>://<hostname_redacted>/2/vendor/angular/angular.js:6996:45
updateView<strong i="24">@http</strong>://<hostname_redacted>/2/vendor/angular-ui-router/release/angular-ui-router.js:3839:34
http://<hostname_redacted>/2/vendor/angular-ui-router/release/angular-ui-router.js:3801:21
$broadcast<strong i="25">@http</strong>://<hostname_redacted>/2/vendor/angular/angular.js:14785:33
http://<hostname_redacted>/2/vendor/angular-ui-router/release/angular-ui-router.js:3218:32
processQueue<strong i="26">@http</strong>://<hostname_redacted>/2/vendor/angular/angular.js:13248:29
http://<hostname_redacted>/2/vendor/angular/angular.js:13264:39
$eval<strong i="27">@http</strong>://<hostname_redacted>/2/vendor/angular/angular.js:14466:28
$digest<strong i="28">@http</strong>://<hostname_redacted>/2/vendor/angular/angular.js:14282:36
$apply<strong i="29">@http</strong>://<hostname_redacted>/2/vendor/angular/angular.js:14571:31
done<strong i="30">@http</strong>://<hostname_redacted>/2/vendor/angular/angular.js:9698:53
completeRequest<strong i="31">@http</strong>://<hostname_redacted>/2/vendor/angular/angular.js:9888:15
requestLoaded<strong i="32">@http</strong>://<hostname_redacted>/2/vendor/angular/angular.js:9829:24 <div ui-view="main" class="ng-scope">

Sunting: Baru saja ditingkatkan ke angular-ui-router # 0.2.14, angular-translate # 2.6.1 dan masalahnya tetap ada.

@pascalc Saat menghapus 'gunakan ketat', saya juga melihat peramban macet setelah 5-10 menit.
angularjs-1.3.15, ios-8.3, iPad-2, ui-router-0.2.13

Ada solusi lain yang memecahkan masalah ini untuk Anda? Bantuan apa pun akan sangat dihargai.

Masalah webkit untuk https://bugs.webkit.org/show_bug.cgi?id=49739 yang sama

Saya menggunakan bahan bersudut dan mendapatkan pesan "Kesalahan: Mencoba menetapkan properti hanya-baca" yang sama. hampir selalu di 8.3 iOS iPad saya (retina pertama). Patch monyet tidak menyelesaikan masalah bagi saya. Juga menghapus "gunakan ketat" pada material bersudut dan bersudut membuat segalanya menjadi lebih buruk. Tidak ada lagi pesan kesalahan dalam safari remote debugger tetapi halaman hanya memuat sebagian - dari ng-repeat, separuh item ditampilkan secara acak dengan benar, separuh lainnya ditampilkan dengan {{...}} sebagai teks biasa.

Mungkin seseorang dapat menggunakan testcase saya http://v2.atocc.de/testcase cukup klik "öffnen" dari salah satu diagram yang terdaftar di iPad - Saya selalu mendapatkan 4x "Error: Mencoba menetapkan ke properti hanya-baca." di sekitar 80% dari banyak muat ulang / percobaan saya - tetapi terkadang masih berhasil. Kasus uji berfungsi dengan baik di browser desktop. Saya memiliki aplikasi material bersudut lain tanpa masalah, jadi saya tidak dapat menyederhanakan testcase.

@gitmh terima kasih untuk reproduksinya, lihat di ipad saya =)

Ini sangat membuat frustasi untuk dilacak, saya minta maaf untuk semua orang yang memiliki masalah yang mendukung perangkat iOS karena masalah ini :(

@gitmh Saya sudah mencoba beberapa lama, tetapi sepertinya saya tidak dapat mereproduksinya di iPad (MD787C / A) dengan iOS 8.3 --- Metode: Tekan tombol "öffnen" pada grafik acak (apakah tombol yang sama ditekan secara berurutan atau tidak sepertinya tidak berdampak).

Jika ada ahli WebKit / JSC yang tahu apakah ada tanda untuk memaksa (berbagai jenis) pengoptimalan bahkan kode dingin, itu mungkin berguna dalam melacaknya.

@gitmh Saya mendapatkan pesan error "Mencoba menetapkan properti hanya baca" setiap kali saya mengklik offnen dengan simulator iPad 2 iOS 8.3 (12F69).

Saya mengalami masalah yang sama di aplikasi Angular saya :(

Bagi saya ini terlihat seperti masalah waktu di iPad - contoh saya memuat diagram dengan beberapa bagian kecil dengan banyak ng-binding. Diagram kecil bekerja lebih baik - katakanlah 30% dari waktu dan diagram besar hanya 5% dari percobaan saya. Hasilnya untuk pengguna adalah panel diagram kosong di sisi kanan jendela. Jarang juga halaman awal dari testcase hanya menampilkan beberapa kartu dengan tombol "öffnen" - jadi tombol material tampaknya menjadi contoh yang baik untuk reproduksi. Saya membuat salinan lain seperti http://v2.atocc.de/testcase2 di mana saya menghapus "gunakan ketat" di angluar, rute-sudut, bahan-sudut dan sudut-aria. Ini membuat seluruh aplikasi tidak dapat digunakan tetapi tidak ada pesan kesalahan di safari. Menambahkan http://v2.atocc.de/testcase3 lain tanpa menggunakan jquery untuk memastikan tidak ada masalah dengannya. http://v2.atocc.de/testcase4 tanpa jquery tetapi dengan "use strict". Saya juga menonaktifkan caching dengan header sehingga pada setiap testcase judulnya harus berubah menjadi TESTCASE n.

@gitmh Saya setuju, waktu / pemuatan tampaknya menjadi pemicunya. Dalam aplikasi saya, saya tidak melihat kesalahan ini sampai saya menekan CPU. Kondisi lain yang disebutkan di utas ini (versi iOS, terjemahan, dll) tampaknya tidak terkait seperti yang saya lihat di iPad mini, iPad air 2, iPhone 5s, dan simulator di setiap iOS versi 8.x dan juga di cordova menggunakan UIWebView dan WKWebView. Saya tidak memiliki catatan tentang hal itu terjadi di perangkat apa pun sejak menghapus 'gunakan ketat'. Ini juga menjelaskan mengapa sangat sulit untuk bereproduksi.

Saya menambahkan testcase lain http://v2.atocc.de/testcase5 dengan patch monyet dari @jhunken. Itu bekerja jauh lebih baik tetapi terkadang aplikasi rusak tanpa pesan kesalahan. The "Error: Mencoba untuk menetapkan ke properti hanya-baca." pesan menghilang sekarang.

+1 Menyatu seperti yang dideskripsikan semua orang.

  1. Saya dapat mengonfirmasi kesalahan menggunakan testcase @gitmh di iPad uji saya MD328FD / A dengan iOS 8.3
  2. Aplikasi saya secara konsisten mengalami masalah ini. tetapi dalam versi beta pribadi, hanya dapat dibagikan melalui PM.
  3. Saya menggunakan beberapa dependensi yang sama yang disebutkan orang lain:
    angular # 1.3.15, angular-ui-router # 0.2.14, angular-translate # 2.4.2
  4. Menghapus "gunakan ketat" membuat safari hang sebagai @pascalc dan @bewithjonam menyebutkan

+1 juga, saya mendapatkan ini di beberapa iPhone / iPad semua menjalankan beberapa versi iOS 8
2 jam sebelum kejadian pertama dilaporkan, saya menggabungkan ini di bower.json saya (tidak ada masalah apa pun sebelum penggabungan ini, dan tidak ada penggabungan lain yang dilakukan hari itu)

-    "ngCordova": "0.1.14-alpha",
-    "ionic": "1.0.0-rc.3",
-    "mapbox.js": "2.1.6",
+    "ngCordova": "0.1.15-alpha",
+    "ionic": "1.0.0-rc.4",
+    "mapbox.js": "2.1.8",

Berikut dependensi lengkapnya:

  "dependencies": {
    "ngCordova": "0.1.15-alpha",
    "ionic": "1.0.0-rc.4",
    "angular-animate": "1.3.15",
    "angular-sanitize": "1.3.15",
    "mapbox.js": "2.1.8",
    "leaflet": "0.7.3",
    "rollbar.js": "1.2.1"
  },
  "resolutions": {
    "angular": "1.3.15",
    "angular-animate": "1.3.15",
    "angular-sanitize": "1.3.15"
  }

Dalam pembaruan untuk tumpukan kami, kami telah berjalan tanpa "use strict" untuk sementara waktu, dan mulai menekan Safari. Dalam kasus terburuk, pengguna harus mematikan dan menyalakan perangkat agar Safari kembali responsif.

Saya optimis sekarang bahwa ada reproduksi yang konsisten bahwa perbaikan mungkin dilakukan, tetapi dalam jangka pendek, adakah yang menemukan solusi yang layak?

Untuk berkontribusi lebih banyak pada diskusi seputar dependensi umum, kami sekarang menggunakan:

{
    ...
    "angular": "~1.3.15",
    "angular-translate": "~2.6.1",
    "ui-route": "0.2.13",
    ...
}

... tapi kami melihat masalah ini sebelum memperkenalkan ui-router ke tumpukan kami. Ini (ditambah garis yang ditunjukkan oleh jejak tumpukan) membuat saya berpikir bahwa ada hal lain yang terjadi di sini dengan bagaimana $scope tetap up-to-date yang kebetulan diperburuk atau dibuat lebih sering oleh bagaimana beberapa dari libs ini berinteraksi dengan inti Angular.

+1

Saya melihat masalah pada perangkat non-64 bit yang menjalankan iOS 8. iPad 2/3/4, mini, dll. Terpengaruh. Perangkat yang TIDAK terpengaruh adalah iPad Air / Air 2, mini 2/3.

Ini adalah bug Apple, tetapi karena kerangka kerja lain (Ember, Require, dll.) Sedang menerapkan solusi, alangkah baiknya melihat Angular juga menerapkan solusi tersebut.

Ngomong-ngomong, adakah yang tahu ke mana harus mengirimkan bug semacam ini ke Apple?

Juga, saya akan menambahkan bahwa penghapusan 'gunakan ketat' hanya berlaku sejauh ini. Seperti yang dikatakan @spencerwi , kami melihat Safari terkunci sepenuhnya dan pengguna harus keluar paksa.

Ini hanya terjadi di Safari di iOS8 (non 64-bit) juga ... bukan Chrome. hanya fyi.

Solusi @HAKASHUN dan @ m3kka untuk mengubah notasi dot ke array berhasil. Mengapa Safari 32-bit tersedak notasi titik di baris tersebut, saya tidak tahu. Itu adalah misteri yang mungkin perlu dipecahkan oleh Apple.

Bisakah notasi array dimasukkan ke Angular dengan benar untuk menyelesaikan masalah ini untuk semua orang?

Kami (Amplify Education, http://amplify.com) juga menghadapi masalah ini. Kami mencoba menghapus 'gunakan ketat', berbagai perubahan di tumpukan kami. Saat ini sedang mempertimbangkan untuk menggunakan tambalan ini untuk mengatasinya.

Ngomong-ngomong, saya telah berhasil membuat @jhunken decorator patch minification-safe dengan mendeklarasikan nama properti yang melanggar sebagai string var s, lalu mereferensikannya dengan notasi braket.

var $id = '$id',
    $$childScopeClass = '$$childScopeClass',
    ...

Lalu:

...
this[$id] = nextUid();
this[$$childScopeClass] = null;
...

Inti bercabang penuh

@zourtney terima kasih telah menerbitkannya, saya menambahkan dekorator ke aplikasi kami yang menghasilkan cukup banyak traceback terkait ini dari perangkat iOS. Ini telah menjadi penyelamat hidup karena aplikasi kami benar-benar tidak dapat digunakan, terutama di iPad. Kami saat ini menggunakan Angular 1.3.8.
EDIT Saya baru saja memeriksa bahwa ada beberapa perbedaan dalam metode $new dalam versi di dekorator dan 1.3.8, saya sedang mengupdate tambalan

Sepertinya ada lebih banyak tempat di mana ada perilaku buruk ini untuk perangkat iOS, kami mendapat traceback baru di Sentry sekarang menunjuk ke baris ini:

https://github.com/angular/angular.js/blob/bab474aa8b146f6732857c3af1a8b3b010fda8b0/src/ng/compile.js#L1096

this.$attr[key] = attrName = snake_case(key, '-');

kemungkinan besar ini akan berfungsi jika ditulis dalam format yang sama seperti di tambalan Anda

var $attr = '$attr';
this[$attr][key] = attrName = snake_case(key, '-');

Ini selaras dengan komentar di utas ini sekitar 9 Desember 2014 https://github.com/angular/angular.js/issues/9128#issuecomment -66314752

Sayangnya saya tidak punya waktu dalam beberapa hari mendatang untuk mencoba menyiapkan lingkungan yang dapat direproduksi untuk ini.
Beberapa info lebih lanjut untuk membuat lingkungan yang dapat direproduksi: ini dipicu dalam panggilan "non interaktif" karena titik awal penelusuran balik ada di sini https://github.com/angular/angular.js/blob/v1.3.8/src/ ng / browser.js # L49

Saya bercabang dan menyesuaikan dekorator inti oleh @zourtney untuk bekerja di Angular 1.3.8 di sini: https://gist.github.com/harrastia/4a963e62605f73bbfff2

Untuk mengikuti masalah webkit: https://bugs.webkit.org/show_bug.cgi?id=138038. Tampaknya patch sedang dalam perjalanan.

+1
Menghapus 'mode ketat' dari angular.js hanya meringankan masalah tetapi masih terjadi secara acak.

bower.json:

"dependencies": {
    "angular": "1.3.15",
    "angular-route": "~1.3.5",
 }

Saya baru saja mengalami masalah ini di situs produksi saya, dan saya perhatikan bahwa bug tersebut berasal dari tugas minifikasi HTML Grunt saya (sungguh!), Dan khususnya, dari mengaktifkan opsi removeOptionalTags .

Yang kedua saya menonaktifkan removeOptionalTags , semuanya mulai bekerja kembali.

PS: Jika Anda menggunakan sudut yeoman , Anda memiliki pengaturan opsi ini.

Saya menemukan ini hari ini juga untuk situs web saya (Iphone 5 iOS 8) .. Saya menggunakan Angular 1.2.28.

+1 pada emulator ios 8, ionic 1.0, angular 1.3.16

Saya hanya mengalami bug ini saat elemen formulir dibungkus dalam template direktif.
Dengan atau tanpa transclude.

Saat ini saya memiliki petunjuk formulir kontak. html template adalah:

<div>
<container h-max="1">
  <column align="left">
    <ng-transclude></ng-transclude>
  </column>
</container>
</div>

dan di file indeks saya menggunakannya:

<contact-form css-prefix="contact-form">

     <ng-input form-id="voornaam" class="form-control"></ng-input>
     <ng-input form-id="achternaam" class="form-control"></ng-input>
     <ng-input form-id="bedrijf" class="form-control"></ng-input>
     <ng-input form-id="telefoon" class="form-control"></ng-input>
     <ng-input form-id="email" class="form-control"></ng-input>
     <ng-text-area form-id="vraag" class="form-control"></ng-text-area>
     <button ng-click="sendContactForm()" class="btn btn-primary contact-form-button"><lang parent-id="contact_form" id="button"></lang></button>
    </contact-form>

Ada lebih banyak kode dalam proyek saya tetapi saya bertanya-tanya apakah itu mungkin karena elemen bentuk yang menyebabkan bug ini.

Kapan itu akan diterapkan di cabang master? Ada ide?

@dhyegofernando Anda harus bertanya pada apel ... bug telah diperbaiki, tetapi tidak diterapkan. lihat di sini: https://bugs.webkit.org/show_bug.cgi?id=138038#c19

Kami telah menggunakan dekorator @jhunken tetapi mengalami masalah dengan id cakupan saat meningkatkan ke Angular 1.4. Kami berhasil mengatasinya dengan membungkus fungsi $ new dalam blok coba tangkap, terinspirasi oleh utas ini:
http://stackoverflow.com/questions/13147026/disabling-jit-in-safari-6-to-workaround-severe-javascript-jit-bugs

Dekorator tambalan monyet yang diperbarui ini berfungsi untuk kami:
https://gist.github.com/johgusta/46fb1ecd459dbc3bfdfc

Perusahaan saya telah merilis utilitas yang menulis ulang kode kami dengan semua tugas properti titik diubah menjadi tugas notasi braket.

Artinya, ini menulis ulang kode berikut

object.$$a = 5;

untuk ini

var __webkitAssign__$$a = '$$a';
object[__webkitAssign__$$a] = 5;

sebagai solusi untuk mencegah TypeError . Utilitas tersedia di npm. Ini telah meringankan masalah "hanya baca" bagi kami di iOS.

Untuk sementara, perusahaan saya hanya menghapus 'use strict'; , tetapi baru-baru ini kami menemukan bug aneh di mana berulang kali membuka dialog dari pustaka desain material sudut mengakibatkan halaman membeku. Sebuah kesalahan dilemparkan: Error: null is not an object (evaluating 'parent.$$childTail.$$nextSibling = child') , dan saya kira entah bagaimana menghasilkan $digest perulangan tak terbatas (dengan demikian membekukan).

Kami mencoba menambahkan kembali 'use strict'; , tetapi kemudian kami mulai melihat kesalahan "hanya baca" pada saat yang sama dengan kesalahan yang disebutkan di atas. Ini membuat saya percaya bahwa referensi null terkait dengan bug JIT ini, dan bahwa bug tersebut tidak (atau mudah-mudahan, _was_ tidak) terbatas hanya pada mode ketat.

Utilitasnya tidak sempurna, tetapi setidaknya tampaknya memperbaiki masalah pada angular.js didistribusikan melalui bower.

Saya telah memverifikasi bahwa solusi @jacksonrayhamilton 's bekerja luar biasa pada v1.2.26

Bagi saya, solusi @jacksonrayhamilton juga bekerja dengan sempurna di v1.4.1

Saya sebutkan sebelumnya bahwa menambal AngularJS berhasil untuk saya, dalam proyek baru itu tidak cukup. Saya menggunakan utilitas yang diposting @jacksonrayhamilton dan sekarang berfungsi, terima kasih! (v1.3.16 dan 1.4.3)

Ini akhirnya diperbaiki di webkit https://bugs.webkit.org/show_bug.cgi?id=138038#c21 tetapi akan membutuhkan beberapa waktu agar pembaruan dapat dilakukan di ponsel semua orang

Saya menggunakan tambalan ini dan itu membuat masalah lain di angularjs 1.4.3 (sebelumnya saya menggunakan 1.2.28):
Jika Anda memiliki direktif dengan cakupan terisolasi yang berisi ngRepeat (atau direktif ng lain yang membuat cakupan baru) itu tidak akan mengevaluasi ekspresi apa pun di dalam HTML ngRepeat. Ini hanya akan mencetak "teks dengan {{variableName}}" alih-alih nilainya.
Inilah masalahnya:
http://stackoverflow.com/questions/31919921/angularjs-1-4-3-ngrepeat-prints-variablename-instead-of-value-when-used-in

Kami menggunakan:

{
    ...
    "angular": "1.3.1",
    "angular-translate": "2.4.2",
    "ui-route": "0.2.15",
    ...
}

Dan seperti yang dijelaskan @brauliodiez, kami baru saja menghilangkan "tidak terdefinisi" dengan mengubah cara kami menggunakan terjemahan,

dari tidak bekerja menggunakan:

<h1 translate>resetPassword.ChangePassword</h1>

untuk bekerja dengan:

<h1>{{::'resetPassword.ChangePassword' | translate}}</h1>

Kami belum pernah menggunakan tambalan monyet apa pun atau belum menghapus 'use strict';

+1 tentang kemanjuran solusi @jacksonrayhamilton menggunakan Angular 1.3.16. Dapat juga mengonfirmasi bahwa masalah ini pada dasarnya merusak aplikasi yang menggunakan Angular Material.

Solusi @johgusta bekerja sangat baik di situs web kami, ditambah lagi terlihat jauh lebih aman karena tidak menulis ulang internal Angular.

Saya mengalami masalah ini kemarin, mendapatkan kesalahan "properti hanya baca". tapi sangat aneh jika bug ini tidak selalu muncul. Saya menggunakan simulater & kode sumber yang sama di notebook mac air yang sama, kadang error, kadang tidak error sama sekali.

Saat ini mendapatkan kesalahan ini di iOS 8.4.1, sudut 1.4.3. Hanya mendapatkan ini di iPad mini.

@jacksonrayhamilton Saya pergi untuk mencoba utilitas tetapi saya sedikit jelas tentang "membuat angular.webkitassign.js diubah dalam direktori yang sama". Saya tidak yakin apa yang saya lakukan di sana.

@alscheuring , di masa mendatang silakan ajukan masalah untuk webkit-assign di halaman Masalah kami.

webkit-assign menyediakan antarmuka baris perintah. Buka terminal dan lakukan npm install -g webkit-assign untuk menginstal program. cd ke direktori file yang ingin Anda ubah. Kemudian ketik webkit-assign FILENAME.js (di mana "FILENAME.js" harus diganti dengan nama file yang sebenarnya), dan program akan menghasilkan salinan tetap dari file tersebut di direktori yang sama.

Terima kasih banyak untuk solusi @jacksonrayhamilton . Bekerja dengan sempurna. Saya telah menggunakan patch @jhunken tetapi tampaknya hanya mengurangi frekuensi terjadinya kesalahan (tampaknya masih terjadi secara acak).

Solusi @jacksonrayhamilton sangat bagus. Kami mengubah angular.js dengan pemuat paket web khusus:

// webpackConfig.js (an excerpt)

{
  module: {
    loaders: [
      {
        test: /angular\.js$/,
        loader: path.join(__dirname, 'webpack/webkitAssignLoader')
      }
    ]
  }
}
// webkitAssignLoader.js

var webkitAssign = require('webkit-assign');

module.exports = function (source) {
  this.cacheable();
  return webkitAssign(source);
};

Saya menerbitkan loader @Cinamonas : https://www.npmjs.com/package/webkit-assign-loader

@johgusta @albertogasparin Versi Angular manakah yang Anda gunakan untuk mengklaim bahwa solusi ini (https://gist.github.com/johgusta/46fb1ecd459dbc3bfdfc) berfungsi? Perbaikan ini tidak berhasil untuk kami dengan Angular-1.4.6.

Solusi @johgusta memecahkan masalah saya di sudut 1.4.2

Solusi @johgusta tampaknya telah memecahkan masalah kami dalam sudut 1.4.5

+1, mencoba dengan 1.4.0, 1.4.6 cerita yang sama. Bagaimana saya bisa dengan cerdas menambal Angular jika saya tidak menggunakan webpack?

Catatan, sementara laporan hanya memengaruhi IOS8, saya sekarang memiliki kasus yang terjadi di IOS9.2 (meskipun menggunakan perbaikan penetapan webkit). Ada ide?

TypeError: Mencoba untuk menetapkan ke properti hanya-baca.
Mozilla / 5.0 (iPhone; CPU iPhone OS 9_2 seperti Mac OS X) AppleWebKit / 601.1.46 (KHTML, seperti Gecko) Versi / 9.0 Mobile / 13C75 Safari / 601.1

Akan mencoba menghapus 'gunakan ketat' setelah saya memiliki perangkat yang dapat saya uji secara teratur.

@ code-tree Jika Anda telah menjalankan semua kode JavaScript di situs Anda melalui webkit-assign dan masih dapat mereproduksi kesalahan itu secara konsisten, Anda harus melaporkan bug di repositori kami.

+1, sudut 1.3.6 & 1.4.8, ios 8.2

@jacksonrayhamilton Mencoba lagi di perangkat teman lain yang menjalankan iOS 9.2 berfungsi dengan baik, jadi saya tidak dapat mereproduksinya, tetapi hal itu masih terjadi pada perangkat yang disebutkan sebelumnya (yang tidak lagi dapat saya akses). Jadi saya kira saya akan menunggu dan melihat apakah ada orang lain yang melaporkan sesuatu.

Halo semuanya,

Saya juga, sayangnya, mengalami masalah ini.
Saya masih sedikit terpesona karena perilakunya:

  • Saya tidak mendapatkannya di setiap halaman dalam aplikasi saya
  • Saya tidak mendapatkannya sepanjang waktu di halaman tertentu, hanya sekitar 50% dari waktu

Apakah ada yang memperhatikan bahwa itu hanya terjadi dengan kode tertentu atau dengan masalah pemuatan?

Saya akan melihat solusi yang disediakan @jacksonrayhamilton , meskipun saya tidak yakin apakah ini dapat digunakan untuk pembuatan akhir saya.

Salam,

Ya, ini pertama kali terjadi pada saya setelah menguji perangkat selama 30 menit tanpa masalah apa pun. Tiba-tiba itu terus terjadi di halaman indeks, tanpa ada yang (secara nyata) berbeda dari 30 menit sebelumnya ...

Halo semuanya,
Saya perhatikan bahwa, untuk beberapa alasan, dalam kasus saya tampaknya terkait dengan penggunaan ng-if.
Saya menggunakan ng-if untuk menyembunyikan halaman saya sampai saya menyelesaikan semua panggilan back-end untuk memastikan bahwa semua data yang digunakan oleh arahan tersedia sebelum memuatnya.
Menghapus ng-if ini, tampaknya saya tidak lagi mendapatkan kesalahan readOnly (diuji sekitar 20 kali).
Apakah ada orang lain yang memperhatikan ini?

Apakah ada efek samping negatif untuk menggunakan @jacksonrayhamilton solusinya? Saya saat ini menggunakan sudut 1.4.7.

@JeroenNelen Meskipun mungkin ngIf bisa menjadi pelakunya, saya pikir kemungkinan besar ngIf mencegah atau memicu beberapa kode lain yang merupakan pelakunya. Adapun kemanjuran solusi, kami menggunakan AST untuk mengubah dan memperbaiki kode, jadi seharusnya cukup tepat. Kami tidak memiliki masalah dalam menggunakannya dalam produksi kami dan kami tidak memiliki masalah terbuka saat ini.

@jacksonrayhamilton Terima kasih atas balasan Anda. Saya akan menguji untuk melihat apakah masalah masih terjadi setelah perubahan ini, jika memang terjadi, saya pikir satu-satunya solusi adalah menggunakan paket Anda (omong-omong, pekerjaan bagus) :).
Yang aneh adalah saya tidak bisa mendapatkan kesalahan terjadi pada halaman lain, hanya pada halaman spesifik ini, oleh karena itu saya ikut campur dengan kode pada halaman tersebut untuk melihat apakah saya dapat mencegah kesalahan secara lokal (daripada menyesuaikan anguluar.js) .

@jacksonrayhamilton Hai, apakah ada cara untuk menggunakan alat Anda dengan Grunt?

var webkitAssign = require('webkit-assign');
module.exports = function(grunt) {
  grunt.registerTask('webkitAssign', function() {
    var file = 'build/scripts.js';
    var code = grunt.file.read(file);
    var transformed = webkitAssign(code);
    grunt.file.write(file, transformed);
  });
};

Atau untuk integrasi yang lebih baik, mungkin Anda ingin mengirimkan plugin ke repositori kami? :-)

Kami menemukan bug dengan angular-translate dan ng-show di iOS8. menghapus ng-show untuk mendukung ng-if memperbaiki masalah. Juga masalah jika orang tua memiliki ng-show. ng-hide pasti punya masalah juga!

@jacksonrayhamilton Terima kasih! Utilitas bekerja dengan sempurna. Masalah tidak lagi ada di iOS 8.3 / iPhone 5, AngularJS 1.4.9. Berjam-jam sakit kepala kemudian, kamu telah membuat hariku.

@spenoir Saya rasa Anda sedang membicarakan bug yang berbeda tentang ng-show / ng-hide :
https://github.com/angular/angular.js/issues/13380#issuecomment -181309484

Saya baru saja mengalami masalah yang sama. Akan mencoba perbaikan tugas webkit dan melaporkan kembali.

Karena ini adalah bug di WebKit, yang telah diperbaiki , ada penyelesaiannya dan kami tidak memiliki reproduksi yang jelas untuk diselidiki lebih lanjut, ini tidak dapat ditindaklanjuti di pihak kami.
Penutupan...

@ code-tree Saya mengalami masalah yang sama dengan deskripsi yang sama (iOS 9, muncul setelah waktu penggunaan yang lama). Bagaimana Anda memperbaiki aplikasi Anda?

@ celle886 Tidak tahu, maaf :)

Sepertinya webkit-assign membantu, tetapi saya tidak dapat mereproduksi masalah dengan andal.

Baru saja menemukan masalah ini di aplikasi web kami dengan Angular 1.4.8 saat menggunakan iPod / iPhone 8.4.1 di Safari 8.0. Terima kasih untuk siapa pun yang pertama kali menyarankan penetapan webkit. Kami menggunakan webkit-assign / gulp dan itu memecahkan masalah yang telah membayangi / mengganggu kami selama 6+ bulan.

Saya memiliki masalah ini menggunakan Angular 2 (dengan Ionic 2) di simulator iPhone 6s / iOS 9.2. Pesannya adalah "Exception: TypeError: Attempted to assign to readonly property" Saya telah mencoba solusi @jacksonrayhamilton webkit-assign, tetapi tampaknya ini tidak berfungsi dengan Angular 2 (saya sudah mencobanya di app.bundle.js terakhir) mengajukan).

Seseorang punya ideia bagaimana memperbaiki masalah ini?

Terima kasih!

@TiagoSilvaPereira Silakan buka masalah tentang ini di https://github.com/angular/angular repo. Repo ini di sini hanya untuk cabang 1.x.

Terima kasih @Narretsz , saya telah memecahkan masalah ini dengan menghapus semua "gunakan kalimat" dari kode saya.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat