Я не знаю об этой функциональности, выходящей из коробки, но вы можете сделать что-то вроде:
defmodule(Macro1, do: defmacro(coalesce(foo), do: quote(do: unquote(foo) + 1)))
defmodule(Macro2, do: defmacro(coalesce(foo), do: quote(do: unquote(foo) - 1)))
Это модули с макросами, конфликтующими именами. Мы должны импортировать их как macro1_coalesce
и macro2_coalesce
.
defmodule EctoExtention do
defmacro __using__(opts) do
Enum.flat_map(opts, fn what ->
{mod, funs} =
case what do
{mod, :*} -> {mod, Module.concat([mod]).__info__(:macros)}
{mod, funs} -> {mod, funs}
end
prefix =
mod
|> to_string()
|> String.downcase()
mod = Module.concat([mod]) # or :"Elixir.#{mod}"
[
quote(do: require(unquote(mod)))
| Enum.map(funs, fn {fun, arity} ->
args = for i <- 0..arity, i > 0, do: Macro.var(:"arg_#{i}", nil)
quote do
@doc ~s"""
Macro #{unquote(fun)} imported from module #{unquote(mod)}
"""
defmacro unquote(:"#{prefix}_#{fun}")(unquote_splicing(args)),
do: unquote(mod).unquote(fun)(unquote_splicing(args))
end
end)
]
end)
end
end
Теперь давайте определим правила импорта макросов из разных модулей.
defmodule AllMyMacros do
use EctoExtention, Macro1: [coalesce: 1], Macro2: :*
end
:*
означает импорт всех макросов. Давайте проверим это:
defmodule Test do
import AllMyMacros
def info, do: Using.__info__(:macros)
def test, do: {macro1_coalesce(42), macro2_coalesce(42)}
end
IO.inspect(Test.info(), label: "macros")
#⇒ macros: [macro1_coalesce: 1, macro2_coalesce: 1]
IO.inspect(Test.test(), label: "test")
#⇒ test: {43, 41}
Можно захватить innerHTML
из страницы и затем обрабатывают его на сервере:
document.getElementsByTagName('html')[0].innerHTML;
// this would also be interactive (i.e. if you've
// modified the DOM, that would be included)
Я предложил бы своего рода интеграцию с FireShot, который является Свободным дополнением Firefox/IE.
Нет, JavaScript не имеет ничего как это.
Я боюсь, что это будет довольно твердо. Я не могу думать ничто, что сделало бы это, не устанавливая на пользовательском компьютере.
Я хотел бы быть доказанным неправым, но по крайней мере это - ответ для Вас.
Получите столько Информации, сколько Вы можете о пользовательской среде с помощью jQuery. (jQuery.support) / агент пользователя / cookie / формируют входные значения, URL (для получают параметры и знать, какая страница имела ошибку),
Отправьте источник страницы любят упомянутый Moff. Попытайтесь сериализировать DOM, как это теперь, таким образом, можно сравнить то, что отличается от исходной страницы.
Также полезно отправить источник страницы, если необходимо сохранить его в исторических целях, с тех пор при обновлении страницы этим станут отличающимся.
Я соглашаюсь с другими ответами - провал.
Однако существует плагин Firefox, Возрастающее Средство сохранения Страницы Pearl, которое могло бы стоить изучить для связанных задач.
Смотрите на pagecrop (реализованный с jQuery + jCrop плагин)
Я должен пропускать что-то, но не можете Вы просто...
Нажмите PrtScr на клавиатуре и вставке в электронную почту.
Посмотрите этот вопрос. В основном, нет, не с JavaScript. Возможно, с ActiveX, но это вернулось к установке вещей на ПК клиента.
Рассмотрите запись сценария серверной стороны, который повторяет запрос пользователя точно (предполагающий, что это не после POST), и хранить получающийся файл HTML.
Вы могли бы изучить использование веб-решения, такого как то, предлагаемое в Супер Снимке экрана! или WebShotsPro.com. В зависимости от Ваших потребностей, таких как снимки экрана определенных областей страниц или страниц, недоступных от внешнего мира, это не может работать на Вас, но это - идея.