Я на платформе электронной коммерции, где я могу редактировать <head>
, однако некоторые вещи, которые вводятся в голову, недоступны для пользователей. Поэтому, даже если мы можем редактировать <head>
, есть инъекции, которые недоступны и, следовательно, неустранимы с помощью традиционного метода.
PS: я могу поместить script до или после этих введенных тегов JS script, которые генерируются и заполняются вместе с моими скриптами. И поэтому мой script будет запускаться перед введенными тегами, если я поместил свой script перед их "линией вставки тегов".
Проблема
Проблема в том, что эта платформа начала внедрять аналитику и спам в голову, в основном подталкивая информацию наших клиентов и продавая ее третьим лицам. Поэтому я хочу отключить их дерьмовые скрипты.
<script type="text/javascript" async="" src="/some.JS.file.min.js"></script>
<script type="text/javascript" async="" src="/another.JS.file.min.js"></script>
Вопрос
Возможно ли с javascript или jquery написать script, который будет редактировать теги перед их запуском? Я могу вставить этот пользовательский script перед тем, как теги будут введены. Я ошибался - теги нежелательного <script>
всегда относятся к первому некомментированному тегу <script>
, и поэтому нет javascript будет работать, чтобы взломать теги перед их запуском.
Что я пробовал до сих пор
Я нашел этот неполный и не рабочий ответ из этого SO-вопроса.
Когда я запускаю полный script с правильными деталями, введенными для моего собственного сайта, я получаю так много ошибок, трудно понять, с чего начать, поскольку я понятия не имею, что все вещи XHR это то, что он делает, и некоторые из ошибок - это те, которые я никогда раньше не видел.
Когда я запускаю только эту часть, которую я несколько понимаю:
doc = document.implementation.createHTMLDocument(""+(document.title || ""));
scripts = doc.getElementsByTagName("script");
//Modify scripts as you please
[].forEach.call( scripts, function( script ) {
if(script.getAttribute("src") == "/some.JS.file.min.js"
|| script.getAttribute("src") == "/another.JS.file.min.js") {
script.removeAttribute("src");
}
});
ИЗМЕНИТЬ ОБНОВЛЕНИЕ:
Их script вставлен ПОСЛЕ моих скриптов. То есть, я могу вставить script в <head>
перед тегами script или после. Сейчас мы изучаем новые платформы, но мне все же нужно решить это, тем более, что за несколько месяцев до того, как мы переключимся. Я надеялся, что есть какой-то JavaScript, о котором я не знаю, который может редактировать теги HTML script до их запуска, если этот script выполняется до их выполнения.
ИЗМЕНИТЬ 2:
Ответ на Nit window.bcanalytics = function () {};
отлично работает и разбивает большую часть его, разбивая window.bcanalytics.push
, но почему-то часть этого еще сохранилась.
В этом блоке:
<script type="text/javascript">
(function() {
window.bcanalytics || (window.bcanalytics = []), window.bcanalytics.methods = ["debug", "identify", "track",
"trackLink", "trackForm", "trackClick", "trackSubmit", "page", "pageview", "ab", "alias", "ready", "group",
"on", "once", "off", "initialize"], window.bcanalytics.factory = function(a) {
return function()
{
var b = Array.prototype.slice.call(arguments);
return b.unshift(a), window.bcanalytics.push(b),
window.bcanalytics
}
};
for (var i = 0; i < window.bcanalytics.methods.length; i++)
{
var method = window.bcanalytics.methods[i];
window.bcanalytics[method] = window.bcanalytics.factory(method)
}
window.bcanalytics.load = function() {
var a = document.createElement("script");
a.type = "text/javascript",
a.async = !0, a.src = "http://cdn5.bigcommerce.com/r-2b2d3f12176a8a1ca3cbd41bddc9621d2657d707/app/assets/js/vendor/bigcommerce/analytics.min.js";
var b = document.getElementsByTagName("script")[0];
// This line still runs and loads analytics.min.js
// This line still runs and loads analytics.min.js
// This line still runs and loads analytics.min.js
b.parentNode.insertBefore(a, b)
// ^^^ This line still runs and loads analytics.min.js
// This line still runs and loads analytics.min.js
// This line still runs and loads analytics.min.js
}, window.bcanalytics.SNIPPET_VERSION = "2.0.8", window.bcanalytics.load();
bcanalytics.initialize({"Fornax": {"host": "https:\/\/analytics.bigcommerce.com","cdn": "http:\/\/cdn5.bigcommerce.com\/r-2b2d3f12176a8a1ca3cbd41bddc9621d2657d707\/app\/assets\/js\/vendor\/bigcommerce\/fornax.min.js","defaultEventProperties": {"storeId": 729188,"experiments": {"shipping.eldorado.ng-shipment.recharge-postage": "on","shipping.eldorado.label_method": "on","cp2.lightsaber": "on","PMO-272.cp1_new_product_options": "on","cart.limit_number_of_unique_items": "control","cart.auto_remove_items_over_limit": "control","BIG-15465.limit_flash_messages": "control","BIG-15230.sunset_design_mode": "control","bigpay.checkout_authorizenet.live": "on","bigpay.checkout_authorizenet.live.employee.store": "control","bigpay.checkout_authorizenet.test": "on","bigpay.checkout_authorizenet.test.employee.store": "control","bigpay.checkout_stripe.live": "on","bigpay.checkout_stripe.live.employee.store": "control","bigpay.checkout_stripe.test": "on","bigpay.checkout_stripe.test.employee.store": "control","sessions.flexible_storage": "on","PMO-439.ng_payments.phase1": "control","PMO-515.ng_payments.phase2": "control","PROJECT-331.pos_manager": "control","PROJECT-453.enterprise_apps": "control","shopping.checkout.cart_to_paid": "legacy_ui","onboarding.initial_user_flow.autoprovision": "on","faceted_search.enabled": "off","faceted_search.displayed": "off","themes.previewer": "enabled"}},"defaultContext": {"source": "Bigcommerce Storefront"},"anonymousId": "24a35a36-7153-447e-b784-c3203670f644"}});
})();
</script>
window.bcanalytics.load
удается выжить и загрузить analytics.min.js(в соответствии с вкладкой "Сеть" ), хотя я не могу сказать, выполняется ли script или нет.
Кроме того, я понял, что эти надоедливые строки HTML:
<script type="text/javascript" defer="" async="" src="http://tracker.boostable.com/boost.bigcommerce.js"></script>
<script type="text/javascript" async="" defer="" src="http://cdn5.bigcommerce.com/r-2b2d3f12176a8a1ca3cbd41bddc9621d2657d707/javascript/jirafe/beacon_api.js"></script>
<script type="text/javascript" async="" src="http://cdn5.bigcommerce.com/r-2b2d3f12176a8a1ca3cbd41bddc9621d2657d707/app/assets/js/vendor/bigcommerce/analytics.min.js"></script>
<script type="text/javascript" async="" src="http://www.google-analytics.com/plugins/ua/ecommerce.js"></script>
всегда относятся к первому некомментированному тегу <script>
, поэтому, к сожалению, ни один из творчески деструктивных методов ниже не будет работать, поскольку любой script, который я пытаюсь вставить перед этими тегами, автоматически обнаружит отвратительные нежелательные перед ним добавлены строки.