8

かみそりのビューをiframeでラップしています。かみそりのビューは、別のドメインのWebサービスです。

これが私がしていることです:

<!DOCTYPE html>
<html>
<body>

<p align="center">
    <img src="http://somewhere.com/images/double2.jpg" />
</p>

<p align="center">
<iframe src="https://secure.somewhereelse.com/MyPortal?CorpID=12334D-4C12-450D-ACB1-7372B9D17C22" width="550" height="600" style="float:middle">
  <p>Your browser does not support iframes.</p>
</iframe>
</p>
</body>
</html>

これはsrcサイトのヘッダーです:

<!DOCTYPE html>
<html>
<head>
    <title>@ViewBag.Title</title>
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
    <link href="@Url.Content("~/Content/themes/cupertino/jquery-ui-1.8.21.custom.css")" rel="stylesheet" type="text/css" />
    <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery-ui-1.8.11.min.js")" type="text/javascript"></script>
</head>

iframesrcで呼び出し元サイトのCSSを使用したい。

CSS URLを渡す方法や、呼び出し元サイトのCSSを継承する方法はありますか?

私は、元のサイトから渡されるパラメーターであるcssファイルの場所でさえ解決します。

誰か提案がありますか?

4

4 に答える 4

6

iframeを使用してサイトにCSSを適用することはできません。cssは、iframeに含まれるページのソースに含まれている必要があります。以前は可能でしたが、場合によってはjavascriptを使用し、ページが同じドメインにあることもありました。

独自のcssを使用できる他の唯一の方法は、WebサービスでcssのURLを渡すことができる場合です。ただし、それを見つけるには、Webサービスのドキュメントを参照する必要があります。

于 2012-08-07T01:38:03.213 に答える
5

iframeCSSのURLを'ssrc属性の引数として渡します。

<iframe src="http://somedomain.com/?styleUrl=@(ResolveStyleUrl())"></iframe>

どこResolveStyleUrlで定義されるかもしれません:

@functions {

  public IHtmlString ResolveStyleUrl()
  {
    string url = Url.Content("~/Content/site.css");
    string host = "http" + (Request.IsSecureConnection ? "s" : "") + "//" + Request.Url.Host + url;
    return Raw(url);
  }

}

これはもちろん、ドメインがスタイルURLクエリ文字列を受け入れ、<link />リモートページに適切なものをレンダリングすることを前提としていますか?

于 2012-08-07T10:37:45.047 に答える
5

Eroc、申し訳ありませんが、iframeを使用して他のサイトにCSSを適用することはできません。ほとんどのブラウザでは、Chromeが示すようなエラーが発生するためです。

安全でないJavaScriptがURLhttp ://terenceford.com/catalog/index.phpでフレームにアクセスしようとしていますか?URLhttp ://www.example.com/example.phpのフレームから。ドメイン、プロトコル、およびポートは一致する必要があります。

ただし、これは、そのページからhtmlを抽出できないことを意味するものではありません(簡単に変更できる場合があります) 。



http://php.net/manual/en/book.curl.phpは、 http ://simplehtmldom.sourceforge.net/を使用したサイトの廃棄に使用できます。

これらの機能を最初に試してみてください。

curl_init();
curl_setopt(); 
curl_exec();
curl_close();

次に、htmlを解析します。

試してみた後、beemp3コンテンツを解析するために作成した以下の例を見ることができます。曲を直接ダウンロードするための豊富なツールを作成したかったのですが、残念ながらキャプチャが原因でできませんでしたが、便利です。


ディレクトリ構造

C:\ wamp \ www \ try

--simple_html_dom.php

--try.php


try.php:

<?php
/*integrate results for dif websites seperately*/
require_once('simple_html_dom.php');
$q='eminem';
$mp3sites=array('http://www.beemp3.com/');
$ch=curl_init("{$mp3sites[0]}index.php?q={$q}&st=all");
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
//curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); 
$result=curl_exec($ch);
curl_close($ch);
$html=str_get_html("{$result}");
$ret = $html->find("a");

echo "<head><style type='text/css'>a:link,a{font-size:16px;font-weight:bold;font-family:helvetica;text-decoration:none;color:#458;}a:hover{color:#67b;text-decoration:underline;}a:visited{color:silver;}</style></head>";
$unik=array(null);
foreach($ret as $link)
{
$find="/(.{1,})(\.php)[?](file=.{1,})&song=(.{1,})/i";
$replace="$4";
if(preg_match("{$find}",$link->href))
    {
    $unik[]=$link->href;
    if(current($unik)===prev($unik)){unset($unik);}
    else{
    echo "<a href='".$mp3sites[0].$link->href."'>".urldecode(preg_replace($find,$replace,$mp3sites[0].$link->href))."</a><br/>";
    }}
}
?>

あなたがphpでコーディングしていないことは知っていますが、コードを翻訳することはできると思います。これを見てください: phpからC#へのコンバーター

賞金を提供することの意味を理解できるのは私だけなので、この質問に時間を費やしました。答えは無関係のように思われるかもしれませんが(私はjavascriptまたはhtmlベースのソリューションを使用していないため)、クロスドメインの問題があるため、これはあなたにとって重要な教訓です。c#で同様のライブラリを見つけていただければ幸いです。幸運を祈ります

于 2012-08-07T15:10:53.513 に答える
2

それを達成するために私が知っている唯一の方法は、サーバー側でHTTPリクエストを作成し、結果をフェッチしてユーザーに返すことです。

最低限、AJAXを使用してページにコンテンツを挿入するには、ターゲットサイトからヘッダーを完全に削除するか、ページヘッダーに独自のcssを挿入してIFRAMEに配置する必要があります。

どちらの方法でも、ターゲットURLを引数として取るプロキシメソッドを実装する必要があります。

この手法には多くの欠点があります。

  1. サーバーでクエリを実行する必要があります。これには、多くの帯域幅とCPUが必要になる可能性があります。
  2. プロキシを実装する必要があります
  3. ドメイン固有のCookieをユーザーから送信することはできませんが、新しいCookieを書き換えることで管理できます。
  4. 多くのリクエストを行うと、サーバーは対象のWebサイトでブラックリストに登録される可能性があります。

面倒なことに比べて、メリットは低く聞こえます。

于 2012-08-07T17:06:11.670 に答える