我想以JavaScript中的字符串形式阅读另一个网站的元描述。我尝试使用CORS,但收到一个错误,说"请求的资源上不存在‘访问控制允许来源’标头。"
有人建议我可以使用PHP来做这件事。我不懂PHP,需要一些帮助。如何调用PHP函数来读取不同域上某个网页的源代码,然后将输出作为字符串提供给JavaScript函数?
这里有一种简单、直接的方法来帮助您获得所需。先试试。。。将下面的全部代码粘贴到一个空的PHP文件上并运行它。在这个简单的场景中,不需要Ajax。所以你有两个选项:
选项NR.1
<?php
//SIMPLY CHANGE THE URL TO THE URL YOU DESIRE
$siteURL = "https://yahoo.com/";
$siteContent = file_get_contents($siteURL);
$metaRx = "#<meta .*description.*>$#m";
preg_match($metaRx, $siteContent, $metaMatches);
$metaString = str_replace("'", "'", $metaMatches[0]);
//DUMP THE ARRAY OF MATCHES TO THE SCREEN... JUST TO EXPLORE THE RESULTS
var_dump($metaMatches);
?>
<script type="text/javascript">
//EXPOSE THE META TO YOUR JAVASCRIPT USING A GLOBAL VARIABLE (FOR EXAMPLE).
var SITE_META_DESC = '<?php echo $metaString; ?>';
// DUMP VALUE TO THE SCREEN USING ALERT....
alert(SITE_META_DESC);
</script>
这是另一种选择。。。它简洁明了;然而,它可能不会给你想要的结果:
选项2
<?php
//SIMPLY CHANGE THE URL TO THE URL YOU DESIRE
$metaTags = get_meta_tags('https://yahoo.com/');
$metaDescription = $metaTags["description"];
var_dump($metaDescription);
//USING A DATA-SOURCE ARRAY:
$arrURLs = array("http://sbb.ch", "http://alibabaexpress.com", "https://yahoo.com", "http://badoo.com" );
$arrMetaDescs = array();
// LOOP THROUGH THE $arrURLs AND GET THE META
// AND STORE THE RESULT IN AN ARRAY TOO.
foreach($arrURLs as $url){
//IF YOU WANT YOU COULD USE THE URL AS KEY FOR EASIER IDENTIFICATION
try{
$metaTags = get_meta_tags($url);
if($metaTags){
$key = preg_replace("&(https://|http://|www.|/.*$)?&", "", $url);
$arrMetaDescs[$key] = $metaTags["description"];
}
}catch(Exception $e){
}
}
var_dump($arrMetaDescs);
?>
<script type="text/javascript">
//EXPOSE THE META TO YOUR JAVASCRIPT USING A GLOBAL VARIABLE (FOR EXAMPLE).
var SITE_META_DESC = '<?php echo $metaDescription; ?>';
alert(SITE_META_DESC);
// IN THE CASE OF ARRAY-BASED META-EXTRACTION,
// STORE THE META VALUES IN JSON FORMAT FOR JAVASCRIPT
var ARR_META_DESC_EXTRACT = '<?php echo json_encode($arrMetaDescs); ?>';
console.log(ARR_META_DESC_EXTRACT);
</script>
这里有一种方法:
- 在服务器上设置页面
source_getter.php
,并包含以下代码(来自此答案):
$html = file_get_contents('your_url_here');
echo $html;
- 如果您使用的是jQuery,请运行如下请求:
$.ajax({
url : 'source_getter.php',
success : function (result) {
doSomethingWithResult(result);
// result will equal $html from your PHP code
},
error : function () {
alert("error");
}
})
我还没有专门测试过这段代码,但它应该可以正常工作。
这可能是一种简单的方法:
<?php
// Get Meta Tags from the given URL
$tags = get_meta_tags('http://www.example.com');
?>
<!DOCTYPE HTML>
<html>
<head>
<script type="text/javascript">
var urlMetaDesc = "<?php echo $tags['description']; ?>";
alert(urlMetaDesc);
</script>
</head>
<body>
</body>
</html>
但请记住,如果网站没有设置元描述标签,则不会返回任何内容,也不会显示任何警报。