Кто нибудь знает бесплатные способы посмотреть свою верстку в Safari, если сижу на винде?Из бесплатных - только воткнуть хакинтош в виртуалку, но нормально работает только на процессорах от intel (и то не на всех), имеющих аппаратную виртуализацию
И стоит ли вообще запариваться по этому поводустоит... сафари на сегодня самый проблемный браузер.
//module.js
import chartModule from '/static/scripts/myScripts/chartModule/myChart.js'; // импортирует функцию для создания графиков
// помещаем chartModule в window, чтоб он был доступен глобально
window.chartModule = chartModule;
const CODE = 'console.log("good");'; // ваш код
(new Function(CODE))(); // создаем из него функцию и сразу вызываем
const CODE = 'console.log("good");'; // ваш код
document.write('<script>' + CODE + '</' + 'script>');
const CODE = 'console.log("good");'; // ваш код
const scriptTag = document.createElement('script');
scriptTag.type = 'application/javascript';
scriptTag.src = URL.createObjectURL(new Blob([CODE]));
document.head.appendChild(scriptTag);
const box = new Vue({data: {groups: []}});
Object.defineProperty(Vue.prototype, '$dataGroups', {
configurable: true,
get() { return box.groups; },
set(value) { box.groups = value; }
});
Vue.mixin({
beforeCreate() {
const {$options} = this;
const {parent} = $options;
if($options.dataGroups) {
const groups = typeof $options.dataGroups === 'function' ? $options.dataGroups() : $options.dataGroups;
const box = new Vue({data: {groups}});
Object.defineProperty(this, '$dataGroups', {
configurable: true,
get() { return box.groups; },
set(value) { box.groups = value; }
});
return;
}
if(!parent) { return; }
const descriptor = Object.getOwnPropertyDescriptor(parent, '$dataGroups');
if(!descriptor) { return; }
Object.defineProperty(this, '$dataGroups', descriptor);
}
});
О ,я как раз собирался уточнить это) Суть в том ,что на сайте есть достаточно много картинок ,и про проверке сайта на скорость загрузки ,мне посоветовало "кэшировать изображения" ,я начитался в интернете ,что можно начать загрузку всех изображений сразу ,до их открытия пользователем ,путем кэширования. Т.е. страницы открылась ,пользователь еще на самом верху ,а изображения в других местах страницы уже грузятся и когда он до них доходит ,они уже загружены ,как то так )
// сделаем функцию, ждущую загрузку основной страницы,
// чтоб не мешать ей при загрузке дополнительных картинок:
function waitWindowLoad() {
if(document.readyState === 'complete') {
return Promise.resolve();
}
return new Promise(resolve => {
const listener = () => {
window.removeEventListener('load', listener);
resolve();
};
window.addEventListener('load', listener);
});
}
// массив url подгружаемых картинок
[
'/images/1.png',
'/images/2.png',
'/images/3.png'
].reduce((promise, url) => promise.then(() => new Promise(resolve => {
// грузим картинки по очереди
const img = new Image();
img.onload = img.onerror = resolve;
img.src = url;
})), waitWindowLoad());
sudo rm -rf /Users/ilyasidorchik/PhpstormProjects/pigna/node_modules/node-sass
const SHORTCUT_SUFFIXES = ['K', 'M', 'B', 'T', 'Q', 'P'];
function shortcutNumber(num) {
const normalized = Number(num).toFixed(0);
const expPosition = normalized.indexOf('e');
const dotPosition = normalized.indexOf('.');
const hasExponent = expPosition !== -1;
const exponent = parseInt(normalized.slice(expPosition + 2));
const len = hasExponent ? expPosition + exponent : normalized.length;
if(len < 4) return String(num);
const suffixNumber = Math.floor((len - 1) / 3);
const suffix = SHORTCUT_SUFFIXES[suffixNumber - 1];
const fullNumber = (hasExponent
? normalized.slice(0, expPosition).replace('.', '')
+ '0'.repeat(exponent - (dotPosition === -1 ? 0 : expPosition + dotPosition + 1))
: normalized
);
if(!suffix) {
// число о-о-очень большое, больше чем мы суффиксов задали...
return fullNumber.slice(0, -(SHORTCUT_SUFFIXES.length * 3))
+ SHORTCUT_SUFFIXES[SHORTCUT_SUFFIXES.length - 1];
}
return fullNumber.slice(0, -(suffixNumber * 3)) + suffix;
}