مساله

  1. یک صفحه برای تعریف کاربران ایجاد کرده‌ایم که خاصیت Form Auto Complete آن off می‌باشد.
  2. در این صفحه فرمی (region) قرارداده‌ایم که دارای یک آیتم از نوع password می‌باشد.

  1. با استفاده از مرورگر firefox (مورد استفاده من) وارد برنامه شده و username و password خود را در مرورگر ذخیره می‌کنیم.
  2. در زمانی که بخواهیم کاربری ایجاد/ویرایش کنیم مرورگر به صورت خودکار آیتم‌های مربوط به username و password را مقدار دهی می‌کند.

🔔 این مورد زمانی رخ می‌دهد که تنها یک کاربر مربوط به application خود را در firefox ذخیره کرده باشیم.

آیتمی که ایجاد کرده‌ایم در html توسط تگ input با نوع password ساخته می‌شود.

<input type="password" 
name="P1009_PASSWORD_HASH" size="30" 
value="" id="P1009_PASSWORD_HASH" required="" class="password apex-item-text">

راهکار 1

برای اینکه به مرورگر بگوییم می‌خواهیم در این قسمت از رمز جدیدی استفاده کنیم باید به ویژگی autocomplete مقدار new-password بدهیم. بر روی آیتم پسورد کلیک کرده و موارد زیر را اعمال می‌کنیم:

  • Advanced
    • Custom Attributes: autocomplete=“new-password”

Advanced | Custom Attributes: autocomplete= “new-password”

Advanced | Custom Attributes: autocomplete= “new-password”

<input type="password" 
name="P1009_PASSWORD_HASH" 
size="30" value="" id="P1009_PASSWORD_HASH" required="" class="password apex-item-text" 
autocomplete="new-password">

بدین ترتیب مرورگر متوجه می‌شود که در این قسمت قصد ایجاد پسورد را خواهیم داشت، نه استفاده از آن!

راهکار 2

استفاده از js

این کد را در قسمت JavaScript صفحه قرار می‌دهیم:

  • JavaScript
    • Function and Global Variable Declaration
setTimeout(function () {
  document.querySelectorAll('input[type="password"]').forEach(e => e.value = '');
}, 100);

این متد پس از 100 میلی‌ثانیه از load صفحه اجرا خواهد شد و تمام فیلدهایی که از نوع password هستند را پیدا و مقدار آن‌ها را خالی می‌کند.

💡 استفاده از setValue در Execute when Page Loads بی‌تاثیر خواهد بود.

apex.item("نام آیتم").setValue(" ")

💡 تغییر نام فیلد هم بی‌تاثیر خواهد بود. مثلا فیلد password را به pw تغییر نام دهیم.