gpt4 book ai didi

javascript - 在加载和运行脚本之前编辑 中的 <script> 标记

转载 作者:可可西里 更新时间:2023-11-01 02:36:16 24 4
gpt4 key购买 nike

我在一个电子商务平台上,我可以在其中编辑 <head> ,然而有些注入(inject)头部的东西,用户是够不着的。所以即使我们可以编辑 <head> ,有些注入(inject)剂无法达到,因此无法通过传统方法去除。
PS:我可以将脚本放在这些注入(inject)的 JS 脚本标签之前或之后,这些标签是与我的脚本一起生成和填充的。因此,如果我将我的脚本放在它们的“标签注入(inject)行”之前,我的脚本将在注入(inject)的标签之前运行。


问题

问题是,这个平台开始向头部注入(inject)分析和垃圾邮件,基本上是劫持我们的客户信息并将其出售给第三方。所以我想禁用他们糟糕的脚本。

<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 编写脚本,在标签运行前对其进行编辑? 我可以在注入(inject)标签之前插入这个自定义脚本。 我错了——不需要的 <script>标签总是放在第一个未注释的 <script> 之前标签,因此没有 javascript 会在标签运行前对其进行破解。


到目前为止我尝试了什么

我从 this SO question 找到了这个不完整且无效的答案.

当我运行完整的脚本并为我自己的站点输入正确的详细信息时,我遇到了很多错误很难知道从哪里开始,因为我不知道所有的 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");
}
});

编辑更新:

他们的脚本插入在我的脚本之后。也就是说,我可以将脚本插入 <head>在他们的脚本标签之前或之后。我们现在正在研究新的平台,但我仍然需要同时解决这个问题,因为在我们切换之前还需要几个月的时间。我希望有一些我不知道的 JavaScript 可以在它们运行之前编辑 HTML 脚本标签,如果这个脚本在它们运行之前运行的话。

编辑 2:

Nit's answer window.bcanalytics = function () {};效果很好,通过打破 window.bcanalytics.push 来打破大部分但不知何故,其中一些仍然存在。

在这个 block 中:

    <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(根据网络选项卡),但我无法判断脚本是否运行。

此外,我发现这些讨厌的 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> 之前开始标签,所以不幸的是,下面的创造性破坏性方法都不起作用,因为我尝试在这些标签之前插入的任何脚本都会自动找到附加在它前面的讨厌的不需要的行。

最佳答案

假设有问题的代码与您链接到的问题的代码相似,我会简单地尝试破坏有问题的代码,使其无法执行。
从这里开始,答案依赖于另一个问题的代码,因为您没有提供任何代码。

有问题的代码依赖于分析,这在脚本开头的页面上得到了保证:

(function(){
window.analytics||(window.analytics=[]),window.analytics.methods=["debug","identify","track","trackLink","trackForm","trackClick","trackSubmit","page","pageview","ab","alias","ready","group","on","once","off","initialize"],window.analytics.factory=function(a){return function(){var b=Array.prototype.slice.call(arguments);return b.unshift(a),window.analytics.push(b),window.analytics}};for(var i=0;i<window.analytics.methods.length;i++){var method=window.analytics.methods[i];window.analytics[method]=window.analytics.factory(method)}window.analytics.load=function(){var a=document.createElement("script");a.type="text/javascript",a.async=!0,a.src="http://cdn2.bigcommerce.com/r6cb05f0157ab6c6a38c325c12cfb4eb064cc3d6f/app/assets/js/analytics.min.js";var b=document.getElementsByTagName("script")[0];b.parentNode.insertBefore(a,b)},window.analytics.SNIPPET_VERSION="2.0.8",window.analytics.load();
//The rest of the script
})();

要破坏整个脚本并阻止它运行,您只需为 window.analytics 分配一个值,该值将与所使用的方法发生冲突。
因此,例如,您可以在有问题的脚本之前运行一个脚本,该脚本仅分配以下内容:

window.analytics = function () {};

这将导致违规脚本因类型错误而失败。

关于javascript - 在加载和运行脚本之前编辑 <head> 中的 &lt;script&gt; 标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31419293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com