Спеціальні функції недоступні у BrowserInteropHelper.HostScript у XBAP

Я намагаюся використовувати XBAP для придбання TWAIN-зображень, але я навіть не отримую таких даних. Здається, що я не можу отримати BrowserInteropHelper.HostScript, щоб дозволити мені повернутися до JavaScript на сторінці хосту.

  • Я використовую XBAP в теці iframe.
  • Я намагався повною мірою довіряти (хоча це повинно бути вимогою).
  • Я тестую на IE9, .NET Framework 4.0
  • BrowserInteropHelper.HostScript не порожній, я можу використовувати звичайні методи вікна, наприклад .Close ().

Мій код виглядає так:

Index.html:


My cat's breath smells like cat food.

<script type="text/javascript"> function WorkDamnit() { $('#someP').hide(); } </script> <iframe src="@Url.Content("~/XBAPs/WPFBrowserApplication1.xbap")" style="border: none;" width="500" height="500" />

Page1.xaml.cs:

private void Button_Click(object sender, RoutedEventArgs e)
{
    if (BrowserInteropHelper.HostScript == null)
        throw new ApplicationException("hostscript is null");
    else
        BrowserInteropHelper.HostScript.WorkDamnit();
}

Я отримав:

System.MissingMethodException: Method '[object Window].WorkDamnit' not found.

Нова інформація:

Цей сценарій працює належним чином з інших комп'ютерів у мережі, і я дізнався, чому. За замовчуванням IE9 за замовчуванням називається "Сайти відображення інтрамережі в режимі сумісності". Це призводить до відтворення сторінки в режимі "IE7", і функція JavaScript доступна з XBAP. Якщо я натискаю кнопку Документ Режим: (під консоллю інструментів розробника F12) і переключившись в режим IE9, то він більше не працює (як зазначено вище). На моєму ПК він використовує режим IE9 за замовчуванням (як слід), і він не працює, якщо я не вручну переключаюся в режим IE7.

3

6 Відповіді

У IE9 доступні вікна методів, тому ви можете спробувати setTimeout

BrowserInteropHelper.HostScript.setTimeout("WorkDamnit()",0);
3
додано

Це досить далеко від цього факту, але я хотів поговорити, тому що я вирішив цю проблему, і це потворний.

Як ви вже помітили, машини воно працює на роботі, оскільки вони працюють у режимі сумісності. Ви можете доручити IE9 вивести вашу сторінку за допомогою режиму сумісності, додаючи наступний тег до своїх HTML-документів:

<meta http-equiv="X-UA-Compatible" content="IE=8"/>

Я впевнений у тому, що цей тег є вашим єдиним "рішенням". Я провів тижні, шукаючи кращого, і це той, який я ще застряг.

З будь-якої причини ScriptInteropHelper має проблеми з IE9. Майкрософт не привертає великої уваги, мабуть, тому що це незрозуміла функціональність. Це, зокрема, означає, що IE7 та IE8 мають різноманітні примхи, надзвичайно дратує, що потрібно запускати в режимі сумісності. Є декілька статей MSDN, наприклад цей та введіть опис посилання тут , де обговорюється питання далі.

1
додано
Зрештою, я пішов з керуванням сканування ActiveX. Це працює і не змушує мене використовувати режим сумісності (також, я знайшов той, що має версію activex AND npapi, тому вона може працювати в більшості браузерів). Здається, що Silverlight все ще підтримується, але XBAPs забуті.
додано Автор Luggage, джерело
Привіт, багажу, чи можу я знати, який елемент керування ActiveX ви вибрали?
додано Автор Windy, джерело

IE9 не виставляє BrowserInteropHelper.HostScript , якщо він не знаходиться в режимі сумісності.

1
додано

Це через налаштування безпеки IE. IE за замовчуванням блокує скрипти, якщо сторінка відкрита з локального диска. IE має відображати попередження як "" Щоб захистити вашу безпеку, Internet Explorer обмежився ... "

However you can change the settings
Check the checkbox "Allow active content to run in files on My Computer"

IE settings

1
додано
Перевірка цієї опції не спрацювала, але вона працює на деяких інших робочих станціях тут (Win7/IE9 та XP/IE8), тому ви можете бути на правильному шляху. Я просто хочу, щоб на моєму комп'ютері з'явилося ДЕЯКИЙ індикатор, чому це не дозволяє це працювати.
додано Автор Luggage, джерело
Я не думаю, що цей параметр застосовується, тому що сценарії ARE (і були) запущені. Я просто не можу отримати доступ до функцій з XBAP. Я отримую попередження про сценарії, якщо я відкриваю файли hmtl прямо з файлу://URI.
додано Автор Luggage, джерело
Спасибі, але я не переживаю цю проблему. "Дозволити активний вміст" не впливає на мою проблему, лише в режимі сумісності.
додано Автор Luggage, джерело
Іншим способом вирішення цієї проблеми є додавання Позначки Інтернету (MOTW) на html сторінці за адресою msdn.microsoft.com/en-us/library/ms537628 (v = vs.85) .aspx
додано Автор meetjaydeep, джерело

Якщо хтось все ще цікавиться цією проблемою, я знайшов рішення. В основному з об'єкта документів ви можете спілкуватися належним чином без будь-яких хаків в останніх браузерах і з doctype HTML5.

Я написав повідомлення в блозі, в якому містяться коди та приклади:

XBAP і Javascript з IE9 або новішої версії - Проблеми з вирішенням проблем з відсутністю методу

Швидко пояснив, що це працює правильно:

Javascript

document.ResponseData = function (responseData) {
    alert(responseData);
}

C # XBAP

var hostScript = BrowserInteropHelper.HostScript;
hostScript.document.ResponseData("Hello World");

Він може потім бути використаний для передачі об'єкта C# у Javascript і використовується як об'єкт "проксі". Перевірте публікацію блогу, щоб дізнатися, як це можна використовувати.

1
додано
Ви говорите, просто використовуйте BrowserInteropHelper.HostScript.document , а не просто BrowserInteropHelper.HostScript ?
додано Автор Luggage, джерело
Не зовсім. Розширення функцій на об'єкт документу можна викликати з C# через BrowserInteropHelper.HostScript.document.
додано Автор Tuukka Lindroos, джерело

BrowserInteropHelper.HostScript.setTimeout ("WorkDamnit ()", 0);

його робота, але якщо я хочу відправити функції зворотного виклику в JS, як я можу відправити об'єкт за допомогою setTimeout?


при використанні для ie8 його працюють добре

dynamic host = BrowserInteropHelper.HostScript;
host.sampleJSFunction(new CallbackObject(this));
0
додано
var chat = new Chat();
var chat = new Chat();
642 учасників

Обсуждение вопросов по C# / .NET / .NET Core / .NET Standard / Azure Сообщества-организаторы: — @itkpi — @dncuug

ІТ КПІ - JavaScript
ІТ КПІ - JavaScript
504 учасників

співтовариство javascript розробників в Telegram