summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/abstract_web_client.js
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web/static/src/js/abstract_web_client.js')
-rw-r--r--addons/web/static/src/js/abstract_web_client.js37
1 files changed, 31 insertions, 6 deletions
diff --git a/addons/web/static/src/js/abstract_web_client.js b/addons/web/static/src/js/abstract_web_client.js
index 1d9c270b6c3..8c82abf846c 100644
--- a/addons/web/static/src/js/abstract_web_client.js
+++ b/addons/web/static/src/js/abstract_web_client.js
@@ -120,12 +120,37 @@ var WebClient = Widget.extend({
// crash manager integration
session.on('error', crash_manager, crash_manager.rpc_error);
window.onerror = function (message, file, line, col, error) {
- var traceback = error ? error.stack : '';
- crash_manager.show_error({
- type: _t("Odoo Client Error"),
- message: message,
- data: {debug: file + ':' + line + "\n" + _t('Traceback:') + "\n" + traceback}
- });
+ // Scripts injected in DOM (eg: google API's js files) won't return a clean error on window.onerror.
+ // The browser will just give you a 'Script error.' as message and nothing else for security issue.
+ // To enable onerror to work properly with CORS file, you should:
+ // 1. add crossorigin="anonymous" to your <script> tag loading the file
+ // 2. enabling 'Access-Control-Allow-Origin' on the server serving the file.
+ // Since in some case it wont be possible to to this, this handle should have the possibility to be
+ // handled by the script manipulating the injected file. For this, you will use window.onOriginError
+ // If it is not handled, we should display something clearer than the common crash_manager error dialog
+ // since it won't show anything except "Script error."
+ // This link will probably explain it better: https://blog.sentry.io/2016/05/17/what-is-script-error.html
+ if (!file && !line && !col) {
+ // Chrome and Opera set "Script error." on the `message` and hide the `error`
+ // Firefox handles the "Script error." directly. It sets the error thrown by the CORS file into `error`
+ if (window.onOriginError) {
+ window.onOriginError();
+ delete window.onOriginError;
+ } else {
+ crash_manager.show_error({
+ type: _t("Odoo Client Error"),
+ message: _t("Unknown CORS error"),
+ data: {debug: _t("An unknown CORS error occured. The error probably originates from a JavaScript file served from a different origin. (Opening your browser console might give you a hint on the error.)")},
+ });
+ }
+ } else {
+ var traceback = error ? error.stack : '';
+ crash_manager.show_error({
+ type: _t("Odoo Client Error"),
+ message: message,
+ data: {debug: file + ':' + line + "\n" + _t('Traceback:') + "\n" + traceback},
+ });
+ }
};
},
set_action_manager: function() {