Добавляя к предыдущему ответу, я просто хотел очистить предполагаемую путаницу с указателем на функцию и функцией.
void heapify(S bt[], unsigned els, bool(*shouldBeBefore)(const S & a, const S & b));
int main() {
[...]
heapify(x, 9, shouldBeBefore(test[0], test[1]));
[...]
}
bool shouldBeBefore(const S & a, const S & b) {
return a.x < b.x;
}
shouldBeBefore
называет функцию, а также аргумент функции. Это добавляет некоторую путаницу. heapify
фактически разрешено принимать любую функцию с сигнатурой bool(const S&, const S&)
, и название должно указывать на это.
Для указателей на функции всегда удобно добавить определение типа
using Comparator = bool(*)(const S&, const S&);
// typedef bool(*Comparator)(const S&, const S&); // or by typedef
Код будет выглядеть как
void heapify(S bt[], unsigned els, Comparator comparator);
int main() {
[...]
heapify(x, 9, shouldBeBefore(test[0], test[1]));
[...]
}
bool shouldBeBefore(const S & a, const S & b) {
return a.x < b.x;
}
, и вы будете вызывать компаратор, как если бы любая другая функция.
Определение указателя на функцию является многословным. Вы также можете использовать std :: function, что немного упрощает синтаксис
using Comparator = std::function<bool(const S&, const S&>>;
Преимущество состоит в том, что вы можете вызывать heapify с любым вызываемым.
По моему мнению , W3C бросил оружие в отбрасывании фреймов из доктрин Strict HTML и XHTML. Теоретически вы бы использовали элемент
для добавления посторонних объектов в ваш документ, но различия и ограничения браузера сделали это незапланированным для многих разработчиков. С гораздо более прагматичным HTML 5 (который все еще является черновиком), iframes вернулись и даже имеют два новых атрибута: seamless
и интригующую песочницу
.
В моей предыдущей компании мы предоставили размещаемое приложение, которое клиенты могли бы интегрировать в свои собственные веб-сайты. Иногда для этого они использовали бы IFrame, вписывая нашу размещенную страницу в свои существующие дизайны. Иногда это даже было сделано незаметно (т.е. IFrame не имел границ или полос прокрутки, он просто выглядел как часть страницы). Я считаю, что это хорошее использование тега.
Я только что изменил сайт с обычного Frameset на Iframes, так как обычные кадры не могли делать то, что мне было нужно. Это не вызвало проблем с остальной базой кода.
IFrames часто используются с AJAX. GMail, например, использует девять скрытых IFrames, я верю.
Они могут быть чрезвычайно полезным в некоторых обстоятельствах, но они ограничены. В частности, встраивание общей функциональности на несколько сайтов.
Например, у меня есть клиент, который управляет несколькими сайтами электронной коммерции в Шотландии. В рамках этого мы разработали пару простых приложений для поиска возможных названий кланов по вашей фамилии или по вашему выбору тартанов (хихикайте, если хотите, но тартаны приносят нашей экономике 700 миллионов долларов в год). База данных за этим удивительно велика (почти десять тысяч строк в таблицах основных имен и тартанов) и довольно регулярно обновляется.
Итак, у нас есть приложения, настроенные для запуска на одном веб-сайте, а затем встроенные в другие наши веб-сайты с использованием iframe, позволяющий простую передачу параметров javascript, чтобы мы могли интегрировать выбор тартана или клана с функциональностью на сайте встраивания. Для iframe установлено значение noborder, поэтому конечному пользователю он кажется совершенно незаметным.
Конечно, для этого есть другие способы, но использование iframe простое и надежное. И это, конечно, не устарело.
включив простую передачу параметров javascript, мы можем интегрировать выбор тартана или клана с функциональностью на сайте встраивания. Для iframe установлено значение noborder, поэтому конечному пользователю он кажется совершенно незаметным.Конечно, для этого есть другие способы, но использование iframe простое и надежное. И это, конечно, не устарело.
включив простую передачу параметров javascript, мы можем интегрировать выбор тартана или клана с функциональностью на сайте встраивания. Для iframe установлено значение noborder, поэтому конечному пользователю он кажется совершенно незаметным.Конечно, для этого есть другие способы, но использование iframe простое и надежное. И это, конечно, не устарело.
IFrames не устарели, но причины для их использования редки.
Причины использования iframe:
Я бы также ответил, что нет необходимости удалять фреймы, это необходимый тег, и он будет использоваться некоторое время.
Фреймы устарели для макета страницы. Никогда не используйте их вместо хорошего макета CSS, даже макет на основе таблицы лучше.
Причины использования iframe:
Поддержка
все еще есть в HTML 5, поэтому я не думаю, это изменится в ближайшем будущем.
Чтобы ответить на другие ваши вопросы:
с (как фреймы в целом) в большинстве случаев не удобны для пользователя:
Для ясности: я говорю о
как элемент интерфейса. Не скрытый элемент для загрузки других вещей, как, например, Google Mail.
75
ответ дан 24 November 2019 в 08:12
поделиться
IFrames не мертвы, но Frameset / Frames умирают.
В последних 2 выпусках IE (IE7 / IE8) масштабирование во фреймах (не IFrames) привело к катастрофическим результатам.
В любом случае используйте IFrames, но ИМХО держаться подальше от Framesets / Frames.
The google gadget specification currently relies on iframes: http://code.google.com/apis/gadgets/docs/spec.html
Currently they are the only simple way to provide isolation for javascript apps that are pulled from multiple domains/providers.
Also many of the widgets that people embed on their websites from third-parties use iframes.
While they do have their drawbacks, iframes provide a pragmatic solution to common problems on the web. I'd have to guess that they will be around for some time to come.