1

Flex で開発された Web プロジェクトがあり、AIR を使用してスタンドアロンで動作させる必要があります。

Air プロジェクトを作成し、flash.html.HTMLLoader を使用して Web アプリケーションをロードしました。コンテンツは正常にロードされ、機能しています。

javascript 関数 window.open を使用して別のリンクを開くボタンはほとんどありません。

リンクが開かない。javascript関数がExternalInterfaceを使用して呼び出されており、表示されているアラートにアラートを配置しました。

関数には単純な window.open が含まれています

window.open("http://www.google.co.in","Google");

言及されたいくつかの解決策を試しましたが、どれも機能していません。

http://digitaldumptruck.jotabout.com/?p=672
http://soenkerohde.com/2008/09/air-html-with-_blank-links/
http://cookbooks.adobe.com/index.cfm?event=showdetails&postId=9243

window.open メソッドを使用して HTMLLoader コンポーネントに単純なページをロードしようとしましたが、まだ機能していません。ボタンをクリックすると、アラートのみが機能しますが、window.open はリンクを開きません。

<html>
<head>
<title>Test</title>
<body scroll="no">
<input type="button" value="Click" onClick="window.open('http://www.google.co.in');">
</body>
</html>

誰か助けてくれませんか

4

2 に答える 2

0

これは、うまくいくかもしれないし、うまくいかないかもしれない根本的な提案ですが、試してみる価値があると思います。

window.openメソッド自体をオーバーライドします

前と同じように、が発射されるまで待っEvent.COMPLETEてから、そこから取り出します。

var html:HTMLLoader = new HTMLLoader();
var urlReq:URLRequest = new URLRequest("whatever.html");
var oldWindowOpen:Object; // save it, just in case

html.load(urlReq);

html.addEventListener(Event.COMPLETE,
  function (event:Event):void {
    oldWindowOpen = html.window.open;

    html.window.open = asWindowOpen;
  });

function asWindowOpen(href:String, name:String="_blank", specs:Object=null, replace:Object=null):void { 
  var urlReq = new air.URLRequest(href); 
  air.navigateToURL(urlReq);
}

W3Schools Reference for Window open()メソッドで指定されているように、他の入力を処理するために関数の一部に入力する必要があります。ObjectExternalInterfaceインタラクションとは異なり、JavaScript-ActionScriptタイプは、AIR-WebKit交換全体で自動的に型キャストされないため、安全のために、すべてのパラメータータイプをに変更する必要がある(または変更したい)場合があります。

于 2012-06-27T17:26:14.710 に答える
0

window.openAIR Webkit 環境では、メソッドのサポートが非常に制限されています。JavaScript window.open() メソッドの呼び出しに関する制限については、Adobe のドキュメントを参照してください。

これに対処する最も簡単な方法は、システムのデフォルトのブラウザでリンクを開くことです。Adobe はまさにこの質問を文書化し、AIR 内から開く URL をポップする方法を示しています。

var url = "http://www.adobe.com"; 
var urlReq = new air.URLRequest(url); 
air.navigateToURL(urlReq);

これを一般化する:

function openExternalLink(href:String):void {
  var urlReq = new air.URLRequest(href);
  air.navigateToURL(urlReq);
}

1 つのオプション: ページで jQuery を実行していると仮定すると、次のようにすべてのリンクを外部で開くことができます。

var html:HTMLLoader = new HTMLLoader(); 
var urlReq:URLRequest = new URLRequest("whatever.html"); 
html.load(urlReq); 
html.addEventListener(Event.COMPLETE,
  function completeHandler(event:Event):void { 
    html.window.jQuery('a').click(clickHandler); 
  });

function clickHandler( e:Object ):void { 
  if (e.target && e.target.href) {
    openExternalLink(e.target.href);
  }
  e.preventDefault();
}

ActionScript での DOM イベントの処理の詳細については、関連する Adob​​e ドキュメントを参照してください。

どれもテストされていませんが、うまくいけば大まかな概要がわかります。


それ以外の場合は、HTMLLoader フレームを含む AIR ウィンドウをポップアップするなど、凝ったことをしようとしている場合は、それについて議論している 1 つのブログ記事を見つけました: AIR の HTML ローダーでリンクを開く

于 2012-06-27T05:24:48.723 に答える