Vimium: Apakah ada cara untuk menonaktifkan Vimium di halaman saya sebagai pemilik situs?

Dibuat pada 19 Jan 2017  ·  27Komentar  ·  Sumber: philc/vimium

Maafkan saya jika ini dijawab di suatu tempat, tetapi saya tidak dapat menemukannya di FAQ atau README.

Saya menjalankan situs web yang digunakan banyak programmer. Beberapa menggunakan Vimium, dan tampaknya ekstensi mencoba meningkatkan pengeditan pada elemen tertentu di halaman saya. Ini telah menyebabkan beberapa kesalahan JS rumit yang sangat sulit untuk dilacak serta banyak pengguna kesakitan karena mereka tidak menyadari kegagalan tersebut karena konflik antara kode kami dan Vimium.

Apakah ada cara untuk menandai elemen dengan "jika Anda menjalankan Vimium, tolong jangan tingkatkan elemen ini"? Terima kasih atas balasan Anda sebelumnya.

Komentar yang paling membantu

Hanya beberapa pemikiran.

Haruskah webmaster memiliki cara untuk menonaktifkan Vimium?

  • Kelebihan: mereka dapat menonaktifkan Vimium secara otomatis untuk memungkinkan pengguna segera menggunakan aplikasi mereka
  • Cons: pengguna akan bingung ketika pintasan tiba-tiba tidak berfungsi, ini dapat dimitigasi dengan memberi tahu pengguna bahwa Vimium dinonaktifkan

Haruskah pemilik situs web memiliki cara untuk mendeteksi Vimium?

  • Kelebihan: mereka dapat meminta pengguna untuk menjelaskan bahwa Vimium dapat mengganggu fungsi normal
  • Cons: ini memfasilitasi sidik jari (tapi ini mungkin sudah menjadi penyebab yang hilang)

Saya tidak yakin apakah webmaster harus memiliki kedua kemampuan tersebut, tetapi jika mereka memilikinya, mungkin tidak harus bergantung pada detail implementasi yang kebetulan. Solusi standar, seperti #2532 mungkin merupakan cara yang tepat.

Misalnya, halaman mungkin menyertakan hal berikut:

<meta name="keybinding" disable="suggest")">
<script>
  document.querySelector('meta[name="keybinding"]').addEventListener('detect', () => {
    console.log('hi vimium user');
  });
</script>

Ini memungkinkan webmaster

  • Deteksi Vimium
  • Nonaktifkan Vimium

Vimium harus

  • biarkan pengguna mengonfigurasi apakah akan

    1. abaikan tag (membiarkan halaman berpikir Vimium tidak diinstal)

    2. nonaktifkan Vimium berdasarkan properti nonaktifkan meta

  • periksa tag meta dan kirim acara deteksi ke sana
  • beri tahu pengguna bahwa halaman tersebut menonaktifkan Vimium

Secara teori, ekstensi keybinding lain juga dapat mengimplementasikan antarmuka ini sehingga web master tidak perlu mendeteksi Vimium, cVim, Surfing Keys, Saka Key, VimFx, Vimari, dll. secara terpisah.

Semua 27 komentar

@vincentwoo... Tidak saat ini. Fitur seperti itu akan membutuhkan pemikiran yang cermat.

Apakah Anda terbuka untuk mempertimbangkan fitur ini? Jika demikian, dapatkah Anda mengatakan apa yang menjadi perhatian utama Anda? Saya jelas tidak ingin menginjak kaki apa pun, tetapi saya ingin menawarkan pengalaman pengguna yang lebih baik bagi pengguna saya yang telah menginstal Vimium (yang merupakan sebagian besar orang).

+1 Ini akan menjadi tambahan yang sangat berguna.

Anda dapat mengirimkan pesan unload palsu pada DOM ready / window load - jika hanya Vimium yang telah dimulai.

Inilah contoh saya: https://jsfiddle.net/2L36ypys/ , dan Anda akan melihat bahwa Anda tidak dapat menggunakan f untuk mengaktifkan petunjuk.

Ini berfungsi sejak komit adce73cb68f7ca3e3e01ca6fbb08a1008c9c8b90 (2016/04/05).

BTW, bisakah Anda memberikan lebih banyak petunjuk dan kami dapat menyelesaikan konflik semacam itu.

Saya sendiri bukan pengguna vimium, jadi saya akan menginstalnya besok dan mencoba membuat laporan bug yang lebih konkret untuk Anda. Terima kasih untuk cuplikannya.

Faktanya, menurut pengujian di https://jsfiddle.net/2L36ypys/1/ , kami dapat mengirimkan pesan seperti itu dari lingkungan "Host" ketika halamannya "loading" , karena Vimium menginstal unload pendengar acara sebelum semua skrip halaman lainnya.

Tetapi Vimium++ saya tidak menggunakan pendengar ini dan tidak ada metode mudah untuk menghancurkannya dengan skrip halaman.

Jadi saya mengharapkan pencarian Anda. Halaman pengujian tempat Anda dapat mereproduksi kesalahan tidak masalah. Terima kasih banyak.

Terkait dengan ini, ada proyek berusia 2 tahun untuk mendeteksi apakah pengguna menggunakan Vimium, mungkin berguna di sini: https://github.com/EvanHahn/Detect-Vimium

@pimlottc Ekstensi tidak berfungsi selama 1 atau 2 tahun, karena Vimium menggunakan 'shadowDOM' untuk menyembunyikan simpulnya.

Saya tidak dapat mereproduksi masalah yang dialami pengguna vimium di situs saya (mungkin karena saya tidak menggunakan Vim secara pribadi). Apakah masih ada kemungkinan untuk menambahkan semacam kelas CSS khusus vimium ke elemen untuk meminta ekstensi agar tidak menambahnya?

Apakah masih ada kemungkinan untuk menambahkan semacam kelas CSS khusus vimium ke elemen untuk meminta ekstensi agar tidak menambahnya?

Saya tidak yakin ini ide yang bagus.

Pastinya akan menimbulkan kebingungan pengguna jika Vimium tidak berfungsi sama sekali di beberapa situs, dan pengguna sendiri sudah dapat menonaktifkan Vimium di situs Anda, lihat di sini .

Juga, jika kami mengejar ide Anda, kami mungkin juga memerlukan mekanisme bagi pengguna untuk mengaktifkan kembali Vimium.

Baik. Apakah ada cara bagi kami untuk setidaknya mengetahui apakah Vimium telah diaktifkan? Masalahnya adalah pengguna menyalahkan kami ketika ada sesuatu yang rusak karena interaksi yang aneh. Layanan saya sudah menggunakan permukaan pengeditan yang sangat rumit (CodeMirror), jadi saya ingin dapat melakukan sesuatu .

Jika Vimium setidaknya dapat menambahkan artefak pada DOM dalam beberapa cara, setidaknya situs seperti @vincentwoo merujuk dapat _disadarkan_ pengguna telah menginstal Vimium dan mereka dapat menampilkan pesan kepada pengguna yang mengingatkan mereka mungkin ada perilaku yang bertentangan saat menggabungkan UI kompleks di halaman web dengan semua penawaran Vimium, atau bahkan menawarkan bantuan dalam mengonfigurasi aplikasi yang dimaksud atau Vimium untuk menyelesaikannya.

Jika Vimium setidaknya dapat menambahkan artefak di DOM dalam beberapa cara ...

Kami memuat Vomnibar di setiap halaman (tingkat atas). Kita bisa menetapkan kelas atau id yang sesuai, kurasa.

Itu pasti akan membantu!

@smblott-github Ide saya adalah bahwa Vimium mengganti nama node host bayangannya dari <div> menjadi nama lain, seperti <vimium-ui> , dan kemudian cukup mencari anak <html> untuk nama tag ini. Saya pikir nama tag elemen khusus ini tidak akan sama dengan situs web lain.

Ide saya adalah bahwa Vimium mengganti nama node host bayangannya dari <div> menjadi nama lain, seperti <vimium-ui> , dan kemudian cukup mencari anak-anak <html> untuk nama tag ini .

Saat ini tidak memungkinkan karena masalah Chromium ini .

Anda dapat mendeteksi sumber daya kami yang dapat diakses melalui web. Sebagai contoh:

var xhr = new XMLHttpRequest(),
    vimiumEnabled = false;
xhr.onerror = xhr.onload = function(){vimiumEnabled = xhr.responseText !== "";};
xhr.open("GET","chrome-extension://dbepggeogbaibhgnhhndojpepiihcmeb/content_scripts/vimium.css");
xhr.send()

@mrmr1993 Saya tidak ingin membuat elemen "khusus", hanya HTMLElement dengan nama tag khusus. Node HTMLElement sama seperti HTMLUnknownElement tetapi masih mendukung untuk melampirkan shadowRoot.

Hanya beberapa pemikiran.

Haruskah webmaster memiliki cara untuk menonaktifkan Vimium?

  • Kelebihan: mereka dapat menonaktifkan Vimium secara otomatis untuk memungkinkan pengguna segera menggunakan aplikasi mereka
  • Cons: pengguna akan bingung ketika pintasan tiba-tiba tidak berfungsi, ini dapat dimitigasi dengan memberi tahu pengguna bahwa Vimium dinonaktifkan

Haruskah pemilik situs web memiliki cara untuk mendeteksi Vimium?

  • Kelebihan: mereka dapat meminta pengguna untuk menjelaskan bahwa Vimium dapat mengganggu fungsi normal
  • Cons: ini memfasilitasi sidik jari (tapi ini mungkin sudah menjadi penyebab yang hilang)

Saya tidak yakin apakah webmaster harus memiliki kedua kemampuan tersebut, tetapi jika mereka memilikinya, mungkin tidak harus bergantung pada detail implementasi yang kebetulan. Solusi standar, seperti #2532 mungkin merupakan cara yang tepat.

Misalnya, halaman mungkin menyertakan hal berikut:

<meta name="keybinding" disable="suggest")">
<script>
  document.querySelector('meta[name="keybinding"]').addEventListener('detect', () => {
    console.log('hi vimium user');
  });
</script>

Ini memungkinkan webmaster

  • Deteksi Vimium
  • Nonaktifkan Vimium

Vimium harus

  • biarkan pengguna mengonfigurasi apakah akan

    1. abaikan tag (membiarkan halaman berpikir Vimium tidak diinstal)

    2. nonaktifkan Vimium berdasarkan properti nonaktifkan meta

  • periksa tag meta dan kirim acara deteksi ke sana
  • beri tahu pengguna bahwa halaman tersebut menonaktifkan Vimium

Secara teori, ekstensi keybinding lain juga dapat mengimplementasikan antarmuka ini sehingga web master tidak perlu mendeteksi Vimium, cVim, Surfing Keys, Saka Key, VimFx, Vimari, dll. secara terpisah.

Saya juga mencari solusi untuk mendeteksi vimium. Proposal @eejdoowad terlihat bagus. Sementara itu saya setuju dengan @gdh1995 , <div> dengan id/nama kelas yang aneh akan segera menyelesaikan masalah untuk saat ini.

Pada vimium v1.59, di bawah ini adalah fungsi yang berfungsi, Tidak sepenuhnya dapat diandalkan, karena kurangnya pengidentifikasi yang dapat diandalkan, jika Anda memiliki ekstensi lain yang memasukkan shadowDom seperti yang dilakukan vimium maka itu akan rusak.

function hasVimium () {
  try {
    const shadowRoot = document.querySelector('html > div').shadowRoot;
    return Boolean(shadowRoot.querySelector('style').textContent.match(/vimium/));
  } catch (e) {
    return false;
  }
}

Saya hanya ingin mengatakan bahwa saya akan khawatir jika mekanisme deteksi bawaan diterapkan. Sidik jari tentu saja dapat selalu dilakukan dengan plugin yang mengubah DOM kecuali seseorang akan melarang javascript situs web, tetapi setidaknya jangan memberi orang target titik data yang mudah untuk dilacak...

Kami dapat memiliki mekanisme di mana kami tidak mendeteksi Vimium, tetapi tambahkan, katakanlah, tag meta di halaman kami yang memiliki pesan untuk ditampilkan untuk berjaga-jaga jika pengguna Vimium menggunakan halaman tersebut, dengan opsi untuk menonaktifkan. Vimium dengan demikian dapat menghindari deteksi sepele dan kami tidak perlu mempelajari apa pun tentang pengguna.

Ini cukup diperlukan untuk aplikasi yang saya kerjakan karena bug seperti https://github.com/philc/vimium/issues/2504 . Ringkasan adalah bahwa dengan menjalankan vimium, situs web akan mulai responsif, dan menjadi lebih lambat dan lebih lambat saat penangan acara menumpuk.

Akan lebih baik jika situs web dapat mendeteksi:

  1. Versi vimium mana yang digunakan
  2. Apakah vimium diaktifkan / dinonaktifkan / dinonaktifkan sebagian (dan kunci mana).

Dan alangkah baiknya jika situs web dapat dengan sopan menonaktifkan vimium dengan cara yang jelas bagi pengguna (sehingga ikon vimium tidak lagi berwarna biru)

@mgsloan Bisakah Anda memberikan halaman contoh? Cara penanganan mode penyisipan telah berubah secara substansial sejak #2504.

(Saya tidak yakin tentang situs yang secara sepihak menonaktifkan Vimium. Itu bisa sangat membingungkan.)

@smblott-github Hai, terima kasih atas tanggapannya! Memang masalah kinerja tampaknya hilang. Besar!

Ada masalah di mana beberapa perilaku input sedikit berbeda dari ketika vimium dinonaktifkan. Saya akan menanyakan dan melihat apakah kami dapat membagikan urlnya.

Hai, yang di sana! Apakah ada pemahaman tentang pendekatan mana yang dapat diterima oleh pengelola proyek? Kami akan bersedia menyumbangkan waktu untuk menyelesaikan ini (cukup banyak pengguna vimium menggunakan CoderPad) tetapi tidak ingin menginjak kaki apa pun.

Saya pikir titik kunci yang diharapkan oleh Vimium adalah bahwa semua pengguna menggunakannya tanpa rasa sakit atau gangguan.

Karena situs Anda memiliki beberapa tindakan khusus yang berbeda dengan Vimium, termasuk esc pada kotak input, haruskah Vimium mengizinkan untuk "mengecualikan" <esc> pada halaman opsinya?

Jika demikian, pengguna Anda dapat mengonfigurasinya secara manual dan mendapatkan kembali tindakan situs (saat ini, tampaknya <esc> tidak dapat dikecualikan).

Tapi saya tidak suka ide Vimium menonaktifkan dirinya sendiri untuk memenuhi kondisi khusus. Ini membahayakan nilai Vimium.

Adapun untuk menerbitkan versi Vimium, saya menyarankan:

  • jalur sumber daya yang dapat diakses web yang berisi string versi Vimium

    • lebih benar, tetapi tidak cocok untuk berbagai varian Vimium

    • misalnya, saya membuat "Vimium C", dan memiliki ID ekstensi yang berbeda, dan URL sumber daya yang berbeda)

  • atau tag <meta> , dibuat oleh Vimium dan berisi beberapa kata seperti "Vimium"

    • lebih mudah untuk diperiksa, tetapi mungkin disalahgunakan oleh malwares

Memeriksa div tingkat atas sepertinya tidak berfungsi lagi karena tidak lagi dipasang sampai pengguna melakukan sesuatu.

Dengan kata lain, saat memuat halaman, tidak ada artefak yang bisa diandalkan

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

everyonesdesign picture everyonesdesign  ·  3Komentar

finalfantasia picture finalfantasia  ·  3Komentar

devanshuDesai picture devanshuDesai  ·  4Komentar

bartlibert picture bartlibert  ·  4Komentar

Poseiden picture Poseiden  ·  3Komentar