Ngay cả trong các trình duyệt hiện đại, nó có thể hữu ích. Tôi thực sự gặp phải vấn đề này hôm nay, chính xác là vì tôi muốn tránh nhúng javascript vào html của mình.
Tôi có một trang html được cung cấp trên đó http://host/variable_app_name/pagename
, nơi variable_app_name
có thể có nhiều giá trị (bạn biết, biến). Nếu nó muốn truy cập các tệp tĩnh, nó phải sử dụng một url như http://host/static/variable_app_name/filename
vậy, vì vậy tôi không thể chỉ định vị trí tệp tĩnh trước tiên nếu không nhìn vào vị trí của trình duyệt để tìm giá trị của variable_app_name
.
Để liên kết đến tệp javascript chính, tôi làm như sau:
<script type="text/javascript" >
var variable_app_name = window.location.pathname.split('/')[1];
document.write('<script type="text/javascript" src="/static/'+variable_app_name+'/pagename.js"></script>\n');
</script>
Đoạn mã trên sẽ bùng nổ ngay cả trong phiên bản Chrome mới nhất, vì thẻ script sẽ được kết thúc ở giữa chuỗi javascript và phần còn lại của chuỗi sẽ được hiểu là html, như sau:
<script type="text/javascript" >
var variable_app_name = window.location.pathname.split('/')[1];
document.write('<script type="text/javascript" src="/static/'+variable_app_name+'/pagename.js">
</script>
\n');
</script>
Có nhiều cách để sửa lỗi này, nhưng tôi thích sử dụng một bình luận html.
Với bình luận html:
<script type="text/javascript" >
<!--
var variable_app_name = window.location.pathname.split('/')[1];
document.write('<script type="text/javascript" src="/static/'+variable_app_name+'/pagename.js"></script>\n');
-->
</script>
Chia nhỏ chuỗi javascript:
<script type="text/javascript" >
var variable_app_name = window.location.pathname.split('/')[1];
document.write('<script type="text/javascript" src="/static/'+variable_app_name+'/pagename.js"></scr'+'ipt>\n');
</script>
Tạo và nối thẻ script thay vì sử dụng document.write:
<script type="text/javascript" >
var variable_app_name = window.location.pathname.split('/')[1];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = '/static/'+variable_app_name+'/pagename.js';
document.head.appendChild(script);
</script>
Tôi thích sử dụng nhận xét html vì đó là một thay đổi ngắn gọn và nó sẽ không cần sao chép hoặc suy nghĩ về mỗi tệp được liên kết.