2017-09-07 8 views
0

現在、私は現在のHTMLページのDIVにそれを挿入するサードパーティのHTMLファイルであるload()に対してjQueryを使用しています。jQueryを使用してHTMLファイル内のドメイン(またはIPアドレス)を書き換えます。

$("#external-page").load(URL, function() { 
    injectDataInPage(); 
    doOtherStuffInPage(); 
}); 

これは非常にうまくいきます。大きな問題は、HTMLに多くのコードを追加したことです(つまり、サーバーリクエストを発行するボタンと別のサーバーからロードされたリソースなど)。

彼らは彼らの要求にしかパスを使用していない場合はOKですが残念なことに、ドメインと時にはIPアドレスを指定します。

ハードコードされたドメインとIPアドレスをすべて自分のサーバーを指すように置き換えたいと思います。

例えば、これらので:

<a href='http://external.com/some/path/of/service'>Click here</a> 

<img src='http://10.2.3.4/some/path/to/image.png'> 

がに再マッピングされます:

<a href='http://my.domain.com/some/path/of/service'>Click here</a> 

<img src='http://my.domain.com/some/path/to/image.png'> 

私は、あなたはおそらくIISのプラグインやNode.jsのか何かでそれを行うことができますが、それが可能である知っています実際にjQueryを使ってクライアント上でそれを行うには?ページがDOMに追加された後、またはDIVに挿入される前のいずれかになります。

答えて

1

ロード完了後に挿入します。すべての要素を見防ぐために'.mydiv a[href]'

$('a[href]').each(function(){ 
    $(this).attr('href', $(this).attr('href').replace("http://external.com", "http://my.domain.com"); 
}); 

$('img[src]').each(function(){ 
    $(this).attr('src', $(this).attr('src').replace("http://10.2.3.4", "http://my.domain.com"); 
}); 

あなたは、いくつかのdivセレクタと'a[href]'を付加することができます。

+0

または、DOMに挿入する前にhtmlで置き換えてください: 'returnedHtml.replace("、 "to") '。なぜあなたはnode.jsが必要だと思いますか? –

+0

私は 'html.replace(" from "、" to ")'を試みましたが、それは絶対にすべてを台無しにしました。私はこのアイデアを再訪し、なぜそれがうまくいかなかったのかを見ていきます。ありがとう! – Jeach

+0

私がNode.jsを検討している唯一の理由は、これができることがわかっているからです。しかし、さらに、サードパーティが提供している他のより複雑なAPIがありますが、これは絶対に意味をなさないものです。 Node.jsを使用すると、より多くの制御ができ、それらのAPIのための「アダプタ」を作成できます。しかし、もし私がNode.jsを完全に避けることができれば、それは良いでしょう。 – Jeach

1

また、URI.jsなどの便利なものもあります。たとえば、replace関数をresource()関数で使用して、すべてのURLを相対的に指定することができます。例えば

:確か

$("#external-page").load(URL, function() { 
    injectDataInPage(); 

    $("#external-page img").each(function(i, img){ 
     var src = $(img).attr('src'); 
     $(img).attr('src', new URI(src).resource()); 
    }); 

    $("#external-page a:link").each(function(i, link){ 
     var href = $(link).attr('href'); 
     $(link).attr('href', new URI(href).resource()); 
    }); 

    doOtherStuffInPage(); 
}); 

、これはテストされていないが、アイデアは明らかです。

+0

提案いただきありがとうございます、私はいくつか試してみて、それがどのように動作するかを見てみましょう。 – Jeach

関連する問題