我正在嘗試通過取消“script-src”指令中的“unsafe-inline”來使現有的 php web 應用程序符合 CSP當前的代碼(工作但僅由于 unsafe-inline ):// Currently - button in a php form <button type="submit" class="btn-dark" name="button_clearUser" onclick="return singleConfirm('Proceed ?')" >Clear Penalty</button> // js function in an external javascript filefunction singleConfirm( msg1 ) { if (confirm(msg1)) { return true; } else { return false; } }為了使上述完全符合 CSP,我嘗試了以下...// Amended - button in a php form - added class confirm <button type="submit" class="btn-dark confirm" name="button_clearUser" >Clear Penalty</button> // Amended - added a eventListener in the external js file// for class confirm document.addEventListener('DOMContentReady', function () { document.getElementsByClassName('confirm') .addEventListener('click', return singleConfirm(msg1));});上述修改無效。而且我在瀏覽器控制臺中沒有看到任何錯誤。我懷疑這是一個JS問題。請建議。................................... 下面的更新 ..................... .....................更新 3(剩下的唯一問題是,即使我單擊取消,表單仍然提交。使用 onclick 方法,使用“return”關鍵字。不確定如何在此處實現“return”概念):::修復了 ReferenceError:未定義 msg1function singleConfirm(msg1) { if (confirm(msg1)) { return true; } else { return false; } }document.addEventListener('DOMContentLoaded', function () { const elems = document.getElementsByClassName('confirm'); Array.prototype.forEach.call(elems, (elem) => { elem.addEventListener('click', () => singleConfirm('Proceed ?')); });});更新 2 :::用于 getElementsByClassName 的數組。通過此更新,我現在彈出一個模態窗口,但前提是我刪除了 msg1(給出 ReferenceError: msg1 is not defined )document.addEventListener('DOMContentLoaded', function () { const elems = document.getElementsByClassName('confirm'); Array.prototype.forEach.call(elems, (elem) => { elem.addEventListener('click', () => singleConfirm(msg1)); });});更新 1 :::替換為 DOMContentReady -> DOMContentLoaded document.addEventListener('DOMContentLoaded', function () { });
1 回答

弒天下
TA貢獻1818條經驗 獲得超8個贊
終于讓它工作如下......
function singleConfirm(msg1) {
if (confirm(msg1)) {
return true;
} else {
return false;
}
}
// Use class confirmProceed on the php/html form
document.addEventListener('DOMContentLoaded', function () {
const elems = document.getElementsByClassName('confirmProceed');
Array.prototype.forEach.call(elems, (elem) => {
elem.addEventListener('click', (event) => {
if ( !singleConfirm('Proceed with Action?') ){
event.preventDefault();
}
});
});
});
- 1 回答
- 0 關注
- 432 瀏覽
添加回答
舉報
0/150
提交
取消